繁体   English   中英

Prepared语句不返回任何结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM