2015-04-21 20 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