准备好的语句 returns 没有结果
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 table 有三列:用户名、密码和电子邮件。但是尽管如此,当我将 $username 变量分配给一个我知道数据库中存在的值时,没有返回任何结果。我知道它存在,因为这个查询
$results = $db->query("SELECT * FROM CUSTOMER WHERE username ='$username'");
echo $results->num_rows;
显示一行,符合预期。谁能告诉我为什么我准备好的陈述不会产生正确的结果?我尝试了多种引用方式,而不是引用方式,对变量值进行硬编码,但没有任何效果。我在大学服务器上,所以我无法控制 PHP 或 MySQL 的设置,但我不确定这与它有什么关系。这似乎是一个编码问题,但我看不出代码有什么问题。
您已成功执行查询,但未对 结果 执行任何操作。
在 $stmt->execute();
之后,您正在寻找 $stmt->bind_result($result);
。
这样,您就可以访问 $result
变量中的用户信息。
num_rows
will be populated only when you execute $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
class上访问这个属性。
$result = $stmt->get_result();
$result->num_rows;
很长一段时间以来,我一直在追寻我的故事。我无法找到此代码的问题:
$query = "SELECT * FROM CUSTOMER WHERE username = ?";
$stmt = $db->prepare($query);
$stmt->bind_param("s", $username);
$stmt->execute();
echo $stmt->num_rows." ".$username;`
我的数据库中的 CUSTOMER table 有三列:用户名、密码和电子邮件。但是尽管如此,当我将 $username 变量分配给一个我知道数据库中存在的值时,没有返回任何结果。我知道它存在,因为这个查询
$results = $db->query("SELECT * FROM CUSTOMER WHERE username ='$username'");
echo $results->num_rows;
显示一行,符合预期。谁能告诉我为什么我准备好的陈述不会产生正确的结果?我尝试了多种引用方式,而不是引用方式,对变量值进行硬编码,但没有任何效果。我在大学服务器上,所以我无法控制 PHP 或 MySQL 的设置,但我不确定这与它有什么关系。这似乎是一个编码问题,但我看不出代码有什么问题。
您已成功执行查询,但未对 结果 执行任何操作。
在 $stmt->execute();
之后,您正在寻找 $stmt->bind_result($result);
。
这样,您就可以访问 $result
变量中的用户信息。
num_rows
will be populated only when you execute $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
class上访问这个属性。
$result = $stmt->get_result();
$result->num_rows;