Php Prepared语句不返回任何结果

Php Prepared语句不返回任何结果,php,mysql,prepared-statement,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表有三列:usern

很久以来,我一直在用这个来追逐我的故事。我无法找到此代码的问题:

 $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->execute()之后,您正在查找
$stmt->bind\u result($result)

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

将仅在执行时填充

但是,99.99%的时间不需要检查
num\u行
。你可以简单地得到结果并使用它

$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_行,您仍然可以在
mysqli_结果
类上访问此属性

$result = $stmt->get_result();
$result->num_rows;

只是一个小问题,
bind_result()
SELECT*
中实际上是无用的。最好使用
从…选择电子邮件
绑定结果($email)