以下代码返回0,即使表类别中有5个条目包含cat = 1
。
$sql = "SELECT name FROM categories WHERE cat = ?";
$stmt = $db->prepare($sql);
$cat = 1;
$stmt->bind_param("i", $cat);
$stmt->execute();
$stmt->get_result();
echo $stmt->num_rows;
但是,当我将$stmt->get_result();
更改为$stmt->store_result();
时,输出为5
。为什么get_result()
在这里不起作用?
我找到了例如这个答案:https://stackoverflow.com/a/8722329/2311074 get_result()
也应该有效。
答案 0 :(得分:1)
看起来另一个答案是错误的并且get_result不会改变语句的状态(这是非常合乎逻辑的,因为你要求mysqli_result,因此从现在开始可以使用它)。
你知道,你使用get_result的方式毫无意义。要提出任何观点,您必须将结果分配给变量,这将为您提供所需的结果:
$res = $stmt->get_result();
echo $res->num_rows;
请注意,num_rows属性通常没用。如果您想知道查询是否返回任何数据,只需将行收集到数组中,然后将此数组用于此目的。
$data = $stmt->get_result()->fetch_all();
if ($data) {
// whatever
} else {
// oops!
}
当然,您不应仅使用此类查询来计算某个类别中的可用商品。出于此目的,必须使用count(*)
查询。