2013-05-31 28 views
1

我發現了一個奇怪的結果,以下是和mysqli對象的簡單更新查詢後的狀態:PHP的mysqli affected_rows方法似乎有一個bug

"UPDATE charstate SET name = '-', type = 'The Homemaker' WHERE gameno = 1" 

正如你所看到的affected_rows = -1但是...信息是「行匹配:3更改:3警告:0」 並且查詢已更新數據庫。 我正在使用mysqli-> affected_rows來檢查返回-1的成功並且失敗了我的測試,但這是不正確的。

任何想法?

mysqli object { 
    affected_rows => (int) -1 
    client_info => (string) mysqlnd 5.0.10 - 20111026 - $Id: 
    client_version => (int) 50010 
    connect_errno => (int) 0 
    connect_error => null 
    errno => (int) 0 
    error => (string) 
    error_list => array(0) 
    field_count => (int) 0 
    host_info => (string) 127.0.0.1 via TCP/IP 
    info => (string) Rows matched: 3 Changed: 3 Warnings: 0 
    insert_id => (int) 0 
    server_info => (string) 5.5.27 
    server_version => (int) 50527 
    stat => (string) Uptime: 11431 Threads: 6 Questions: 542 Slow queries: 0 Opens: 52 Flush tables: 1 Open tables: 2 Queries per second avg: 0.047 
    sqlstate => (string) 00000 
    protocol_version => (int) 10 
    thread_id => (int) 114 
    warning_count => (int) ... 
+0

你確定查詢確實成功了嗎?文檔清楚地表明,「affected_rows」值爲-1意味着查詢返回了某種錯誤。 – CmdrMoozy

+0

@Cmdr我以爲同樣的事情,但'errno'顯然是'0',不可能是 –

+3

也許是這個問題? http://stackoverflow.com/questions/12569862/php-mysqli-statement-returns-a-single-row-1-rows-affected-and-no-error您是否使用mysqli的準備語句? – CmdrMoozy

回答

0

當使用「root」作爲mysql用戶登錄名(無密碼)時,出現上述行爲。 使用其他用戶時,正確給出affected_rows。

奇怪! 似乎這是在MySQL或PHP中的某種錯誤。 我不知道該向誰報告哪些或如何報告。

+0

描述的行爲確實很奇怪。你使用的是什麼版本的PHP和MySQL?在提交錯誤報告之前,請確保您使用的是最新的補丁版本。如果您提交錯誤報告,我會首先將它提交給PHP,除非您可以通過PHP之外的另一種方法複製問題。噢,用「root」做*任何事情,沒有密碼是一個非常糟糕的主意。即使在你的開箱。只是在說'。 – Spudley

+0

MySQL版本5.5.27和PHP版本5.4.7 - 這是在Windows下的XAMPP下,但我沒有在確切的條件下在其他地方測試。仍然很奇怪。 – iss42

相關問題