num_rows仅适用于`store_result()`

时间:2015-04-21 07:12:37

标签: php mysqli

num_rows仅在我使用mysqli->store_result()时才有效。这意味着它只适用于缓冲结果。有人能解释为什么会这样吗?

我使用mysqli->store_result()时,在下面的代码中

,然后num_rows有效。否则就说0

function retrievearticle($mysqli, $articleid)
{
echo $articleid;
$query="select ArticleText,ArticleTitle from article where ArticleId=?";
$stmt=$mysqli->stmt_init();
$stmt->prepare($query);
$stmt->bind_param('i', $articleid);
$stmt->execute();
$stmt->store_result();
echo "here 2";
$stmt->bind_result($ArticleText, $ArticleTitle);
$stmt->fetch();
echo $stmt->num_rows;

} 

1 个答案:

答案 0 :(得分:1)

As per this comment in the PHP manual, here's an explanation of what you are facing

  

请注意,对于有时会错过阅读此功能的重要手册条目的人:

     

如果您不使用mysqli_stmt_store_result(),并且immediatley在执行预准备语句后调用此函数,则此函数通常会返回0,因为它无法知道结果集中有多少行,因为结果集不是保存在记忆中了。

     

mysqli_stmt_store_result()将结果集保存在内存中,因此您可以在执行语句并保存结果集后立即使用此函数。

     

如果不保存结果集但仍想使用此函数,则在使用此函数确定行数之前,必须使用mysqli_stmt_fetch()实际循环结果集一行一行。

     

但是,如果你想确定行数而不存储结果集并在循环之后,为什么不在每次获取行时只在循环中保留一个内部计数器并保存函数调用。

     

简而言之,只有保存结果集并希望在循环之前确定行数,此函数才真正有用,否则您可以像我建议的那样重新创建它的使用。