准备好的语句不返回任何结果

时间:2019-08-01 23:16:41

标签: php mysql prepared-statement

我一直在追寻这个故事。我找不到与此代码有关的问题:

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

2 个答案:

答案 0 :(得分:3)

num_rows仅在您执行$stmt->store_result();时填充。

但是,您99.9%的时间不需要检查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;

答案 1 :(得分:0)

您已成功执行查询,但对结果却没有执行任何操作。
$stmt->execute();之后,您正在寻找$stmt->bind_result($result);

这样,您将可以访问$result变量中的用户信息。