2008-09-17 64 views
0

我在PHP中使用mysqli類和準備語句編寫數據庫處理程序類。我試圖打印出結果。它沒有正常工作,所以我決定做一些調試。我嘗試使用mysqli_statement類中的num_rows()方法,但它仍然返回0.我決定編寫一小部分測試代碼以使它更簡單,以便我可以看到發生了什麼問題。然後我能夠返回我想要的數據,但即使實際選擇和檢索某些數據,方法仍會返回0。下面是代碼:mysqli_statement :: num_rows()返回錯誤的值

$mysqli = new mysqli('localhost', 'username', 'password', 'database'); 
if(mysqli_connect_errno()) 
{ 
    die('connection failed'); 
} 

$statement = $mysqli->stmt_init(); 

$query = "SELECT name FROM table WHERE id = '2000'"; 
if($statement->prepare($query)) 
{ 
    $statement->execute(); 
    $statement->bind_result($name); 
    $statement->fetch(); 
    $statement->store_result(); 
    echo $statement->num_rows(); 
    echo $name; 
} 
else 
{ 
    echo 'prepare statement failed'; 
    exit(); 
} 

所以是的,預期的結果是:

1name 

而實際結果是:

0name 

誰能告訴我這是爲什麼?

回答

5

不知NUM_ROWS()的報告相對於當前的ResultSet。嘗試在獲取數據之前捕獲num_rows()。例如

if($statement->prepare($query)) 
{ 
    $statement->execute(); 
    $statement->store_result(); 
    echo $statement->num_rows(); 
    $statement->bind_result($name); 
    $statement->fetch(); 
    echo $name; 
} 

這有什麼影響嗎?

+1

確實,這是問題所在。爲了讓num_rows()返回正確的值,必須在fetch()之前調用store_result()。 – 2008-09-17 06:12:51

+0

這就是我所想的;獲取數據會增加內部行計數器,以便您可以執行類似while($ statement-> num_rows()){/ * do stuff * /} – 2008-09-17 15:08:50

0

它看起來不像你聲明的$ name。

此外,嘗試刪除bind_result()並取得(),所以它讀取是這樣的:

$statement->execute(); 

$statement->store_result(); 

printf("Number of rows: %d.\n", $statement->num_rows); 
1

num_rows不是一種方法,它是一個屬性。