num_rows:get_result vs store_result

时间:2016-10-22 12:33:36

标签: mysqli prepared-statement mysql-num-rows

以下代码返回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()也应该有效。

1 个答案:

答案 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(*)查询。