我一直在追寻这个故事。我找不到与此代码有关的问题:
$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的设置,但是我不确定这与它无关。似乎是一个编码问题,但是我看不到代码有什么问题。
答案 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
变量中的用户信息。