2010-05-15 122 views
5

我所試圖做的是:(編程)mysql_affected_rows()函數始終返回1,即使沒有行已更新

更新狀態其中id是什麼東西,如果沒有在那裏更新的行,給出錯誤:我們無法找到用id記錄一些東西,否則給消息成功。

這裏我使用mysql_affected_rows()來知道一行是否被更新,但它總是返回1,所以即使沒有更新行,用戶也會收到成功消息。

誰能告訴我它可能是什麼?

下面的代碼:

function update_sql($sql) { 


    $this->last_query = $sql; 

    $r = mysql_query($sql); 

    if (!$r) { 
    $this->last_error = mysql_error();   
    return false; 
    }  
    $rows = mysql_affected_rows(); 
    if ($rows == 0) return true; // no rows were updated 
    else return $rows; } 

此代碼返回1.

+0

您能向我們展示一下這段代碼嗎? – 2010-05-15 14:10:39

回答

4

這是因爲true會打印出 「1」,如果你使用echo。對於調試嘗試使用var_dump(),或讓你的函數返回0(在我看來,在這種情況下,更好的選擇)。

一個小紙條;我認爲你應該試着讓你的代碼更具可讀性(如果你的問題中的代碼與你的文件中的代碼具有相同的佈局)。嘗試縮進代碼塊,使用單獨的線關閉大括號,等...

+0

+1由於缺乏問題信息,受過良好教育的猜測。 – 2010-05-15 14:23:27

+0

感謝您的建議,我會試一試。 該代碼在我的編輯器中看起來是正確的,但是當我將它粘貼在此處時,它已經變得很緊密了。 – happyhardik 2010-05-15 14:27:34

+0

好的,在這種情況下,您會忽略我的小注釋:) – 2010-05-15 14:27:59

2

這只是一個猜測...

也許你的函數的工作原理爲例外?也許這段代碼if ($rows == 0) return true;工作正常,並且返回true但您將該值視爲整數(布爾值true可以顯示爲1)?執行:var_dump(uddated_sql('YOUR QUERY'))並檢查它是否返回布爾值true或整數1值。