2015-04-21 22 views
1

num_rows作品只有当我使用mysqli->store_result()。这意味着它只适用于缓冲结果。有人能解释为什么会发生这种情况?NUM_ROWS工作只与`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; 

} 
+0

请参阅[此链接](http://php.net/manual/fr/mysqli-result.num-rows.php#105289)。 – D4V1D

+0

不用担心。这里是一个[链接到一个更加不言自明的注释](http://php.net/manual/en/mysqli-stmt.num-rows.php#71988) – D4V1D

+0

@ D4V1D现在好了,我会认为这是一个答案,如果你可以把它放在那里.. –

回答

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()并将结果保存在存储器中设置这样你可以immedietly使用此功能,您都执行该语句,并保存结果集之后。

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

想一想,如果你想确定没有存储结果集的行的数量,并且在循环之后,为什么不在每次获取一行时简单地在循环中保留一个内部计数器并保存函数调用。

总之,如果保存的结果集,并希望通过它循环之前确定的行数,否则,你几乎可以重建其使用像我建议这个函数是唯一真正有用的。

+0

谢谢!并请支持新人,因为他们不知道这是他们在这里问的原因。我总是向你解释如何评价工作除了收到这个一个非常糟糕的响应.. :( –

+0

我是支持的。我会以其他方式标记你的。 – D4V1D