2016-10-22 29 views
0

即使表类别cat = 1中有5个条目,下面的代码返回0。num_rows:get_result vs store_result

$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/2311074get_result()也应该工作。

回答

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

相关问题