num_rows:get_result 与 store_result

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;
Run Code Online (Sandbox Code Playgroud)

但是,当我更改$stmt->get_result();$stmt->store_result();输出时5。为什么get_result()在这里不起作用?

例如,我在这个答案中发现:https : //stackoverflow.com/a/8722329/2311074get_result()应该有效。

You*_*nse 5

看起来另一个答案是错误的,并且 get_result 不会改变语句的状态(这是非常合乎逻辑的,因为您要求 mysqli_result 并且因此应该从现在开始使用它)。

你看,你使用 get_result 的方式是毫无意义的。为了说明这一点,您必须将结果分配给一个变量,这将为您提供所需的结果:

$res = $stmt->get_result();
echo $res->num_rows;
Run Code Online (Sandbox Code Playgroud)

请注意, num_rows 属性通常毫无用处。如果您想知道您的查询是否返回任何数据,只需将行收集到数组中,然后使用此数组即可。

$data = $stmt->get_result()->fetch_all();
if ($data) {
    // whatever
} else {
    // oops!
}
Run Code Online (Sandbox Code Playgroud)

当然,您不应仅使用此类查询来计算某个类别中可用的商品。为此count(*),必须使用查询。