2016-10-22 27 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(*)查詢。

相關問題