Ada*_*dam 1 php mysqli prepared-statement
以下代码返回 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()应该有效。
看起来另一个答案是错误的,并且 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(*),必须使用查询。