首页 > 解决方案 > 准备好的语句不返回结果

问题描述

很长一段时间以来,我一直在追寻我的故事。我无法找到此代码的问题:

 $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 的设置,但我不确定这与它有什么关系。这似乎是一个编码问题,但我看不出代码有什么问题。

标签: phpmysqlprepared-statement

解决方案


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;

推荐阅读