[英]Prepared statement returns no results
我用这个很长一段时间一直在追逐我的故事。 我无法找到此代码的问题:
$query = "SELECT * FROM CUSTOMER WHERE username = ?";
$stmt = $db->prepare($query);
$stmt->bind_param("s", $username);
$stmt->execute();
echo $stmt->num_rows." ".$username;`
我的数据库中的CUSTOMER表有三列:username,pwd和email。 但是,当我将$ username变量分配给我知道存在于数据库中的值时,不会返回任何结果。 我知道它存在是因为这个查询
$results = $db->query("SELECT * FROM CUSTOMER WHERE username ='$username'");
echo $results->num_rows;
显示一行,这是预期的。 有人可以告诉我为什么我准备好的陈述不会产生正确的结果吗? 我尝试了几种引用的变体,而不是引用,硬编码变量的值,但没有任何作用。 我在大学服务器上,所以我无法控制PHP或MySQL的设置,但我不确定它与它有什么关系。 这似乎是一个编码问题,但我看不出代码有什么问题。
只有在执行$stmt->store_result();
时才会填充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;
您已成功执行查询,但未对结果执行任何操作。
在$stmt->execute();
,您正在寻找$stmt->bind_result($result);
。
有了这个,您将可以访问$result
变量中的用户信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.