2013-09-10 70 views
-1

我不明白爲什麼$ amountOfUsers顯示爲0?- > num_rows無法正常工作

在我轉移到bind_param函數之前,這用於工作......我只使用了prepare()的query()instad。但是這樣更安全,我只是很難理解爲什麼這種方式無效,以及如何解決這個問題。

$stmt = $mysqli->prepare("SELECT id, expire, status, username FROM username WHERE username= ?"); 
$stmt->bind_param('s', $username); 
$stmt->execute(); 

//Counting results. 0 = Invalid, 1 = Valid 
$amountOfUsers = $stmt->num_rows; 

我得到的錯誤是:$ amountOfUsers沒有正確計算結果的數量。

+0

嘗試'mysqli_num_rows',而不是'num_rows'在'$ amountOfUsers = $ stmt-> mysqli_num_rows;'(http://php.net/manual/en/mysqli -result.num-rows.php) –

+0

@ Fred-ii-我試過了,我得到:未定義的屬性:mysqli_stmt :: $ mysqli_num_rows在... –

+0

有沒有可能用戶名不存在於表中? –

回答

1
$stmt = $mysqli->prepare("SELECT id, expire, status, username FROM username WHERE username= ?"); 
$stmt->bind_param('s', $username); 
$stmt->execute(); 
// Store the result (so you can get the properties, like num_rows) 
$stmt->store_result(); 
// Get the number of rows 
$amountOfRows = $stmt->num_rows; 

// Bind the result to variables 
$stmt->bind_result($id, $expire, $status, $db_username); 
// Process the variables 
while($stmt->fetch()) { 
    printf("%d %s %s %s\n", $id, $expire, $status, $db_username); 
} 
+0

我的下一行是「$ row = $ stmt-> fetch_assoc();」也不起作用。 –

+0

最好的練習是比底部更好的練習嗎? –

+0

@Arian我改變了代碼。現在應該是最高效的。 – FalconC

-2

我永遠不會在我的生活理解,爲什麼PHP用戶是如此傾向於行數返回。
特別是如果僅用作一個標誌...如果有任何數據返回!

爲什麼不採取非常返回的數據,看看?

$sql ="SELECT id, expire, status, username FROM username WHERE username= ?s"; 
$stmt = $mysqli->prepare($sql); 
$stmt->bind_param('s', $username); 
$stmt->execute(); 
$res = $stmt->get_result(); 
$row = $res->fetch_assoc(); 
if ($row) 
{ 
    // do whatever 
} 

我永遠不會理解長和有風代碼的傾向。
爲什麼不讓自己成爲一個抽象庫,並把所有東西都放在一個單一的行中?

$sql = "SELECT id, expire, status, username FROM username WHERE username= ?"; 
if ($row = $db->getRow($sql)) 
{ 
    // do whatever 
} 
+0

PHP開發人員不使用'num_rows'作爲標誌來查看是否返回數據。在OP的情況下,他想知道用戶名是否有_exactly_一行,而不是零行(用戶未註冊)或多行(表錯誤)。後者返回數據,但不應該使用。 – FalconC

0

有時事情不按計劃進行。檢查庫中的可用結果代碼和錯誤通常是用於故障排除效率比對陌生人的詢問,但希望這陌生人可以幫助...選擇這些模式之一:

答:

$result = $stmt->execute(); 
if (!$result) { /* handle errors */ } 

B:

$stmt->execute(); 
if ($stmt->errno != 0) { /* handle errors */ } 

C(發展疑難解答只,而不是代碼,你會亂放):

$stmt->execute(); 
print_r($stmt->error_list); 
這裏

更多信息和相關網頁: http://www.php.net/manual/en/mysqli-stmt.errno.php

+0

P.S.我的猜測是你的桌子不叫「用戶名」 – dkamins

+0

是。在我準備好我的發言之前,它工作得很好。我需要:$ stmt-> store_result(); –