php - 准备好的语句不返回结果
问题描述
很长一段时间以来,我一直在追寻我的故事。我无法找到此代码的问题:
$query = "SELECT * FROM CUSTOMER WHERE username = ?";
$stmt = $db->prepare($query);
$stmt->bind_param("s", $username);
$stmt->execute();
echo $stmt->num_rows." ".$username;`
我数据库中的 CUSTOMER 表包含三列:用户名、密码和电子邮件。但是,当我将 $username 变量分配给我知道数据库中存在的值时,不会返回任何结果。我知道它存在是因为这个查询
$results = $db->query("SELECT * FROM CUSTOMER WHERE username ='$username'");
echo $results->num_rows;
显示一行,这是预期的。谁能告诉我为什么我准备好的陈述不会产生正确的结果?我尝试了几种引用变体,而不是引用,硬编码变量的值,但没有任何效果。我在大学服务器上,所以我无法控制 PHP 或 MySQL 的设置,但我不确定这与它有什么关系。这似乎是一个编码问题,但我看不出代码有什么问题。
解决方案
num_rows
只有当你执行时才会被填充$stmt->store_result();
。
但是,99.99% 的时间您不需要检查num_rows
. 您可以简单地获得结果get_result()
并使用它。
$query = "SELECT * FROM CUSTOMER WHERE username = ?";
$stmt = $db->prepare($query);
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();
foreach($result as $row) {
// ...
}
如果你真的想得到 num_rows,你仍然可以在mysqli_result
类上访问这个属性。
$result = $stmt->get_result();
$result->num_rows;
推荐阅读
- c# - 您将与派生类完全相关的事件方法放在哪里,但哪些调用方法与派生类不完全相关?
- python - 时间复杂度 - Python eval 的 BigO 表示法
- html - html 顶部的白条(已经没有边距)
- angular - ViewChild 返回“未定义”-Angular2
- javascript - keycloak 版本和带有 JS 前端的 Spring Boot App 的自动令牌更新问题
- javascript - 检查名称列上的哪个单元格等于某些文本
- c++ - 为什么这个随机数生成器不是线程安全的?
- javascript - 如何获取数组中子项的长度
- mysql - mysql - 使用 sum 和 rollup 获取列的百分比
- c# - 避免在 Entity Framework Core 的 DbContext 中使用“使用块”是否安全?