2011-09-30 44 views
1

謝謝你讓我的問題更清楚。如果沒有編輯數據,PHP更新出錯

我有一個表單用於保存數據庫中的內容。 用戶也可以通過編輯表單中的字段並提交它來更新任何內容。

更新查詢看起來是這樣的: -

$res = mysql_query("UPDATE freight SET .... WHERE id='$id'") or die (mysql_error()); 
    if(mysql_affected_rows() > 0){ 
     //do some stuff 
     return true;  
    } 
    else{ 
     return false; 
    } 

現在我的問題是這樣的:如果用戶更改某些領域,而更新的形式,mysql_affected_rows()函數是> 0,所以我能「/ /做一些事情「。 但是,如果用戶沒有更改表單中的任何字段並僅提交,mysql_affected_rows返回0,我到達了假塊。

我的印象是UPDATE每次都應該覆蓋,因此mysql_affected_rows()應該返回1,而不管是否有任何字段已被更改。

我使用返回值在屏幕上顯示相應的成功或錯誤消息。因此這是一個嚴重的錯誤。

你能建議什麼是正確的方法來實現正確的功能?

感謝, Vish

如果查詢本身不能向服務器發出
+0

MySQL不認爲它運行更新查詢不會影響任何行的錯誤(應該實現不認爲它是一個錯誤)。任何創建的錯誤都來自無效查詢或PHP腳本中發生的任何錯誤。爲了能夠提供幫助,我們需要更多信息。 – Corbin

+0

你可以發佈一些代碼嗎?* –

+0

標籤說沒有關於MySQL,沒有代碼...什麼更新按鈕? Mysql編輯器更新按鈕?或者一個輸入類型提交按鈕?沒有代碼,你的錯誤可能無處不在...... – Talisin

回答

1

mysql_affected rows()-1將被退回,可能是因爲語法錯誤的,如果最近一次操作是既沒有一個INSERT或UPDATE語句。

當使用UPDATE時,MySQL不會更新新值 與舊值相同的列。這創造了mysql_affected_rows()可能實際上不會與 匹配的行數相等的可能性,只有被 查詢字面上影響的行數。

使您的解決方案可以通過以下邏輯(但這不是安全的)

if(mysql_affected_rows()!=-1){ 
} 
+0

謝謝@diEcho。這真的很有用! 請您分享一下您在回覆中引用的文字。 – VishwaKumar

+0

我在第一行提到的鏈接 – diEcho

0
if($_POST['message'] != '') { 
    // add the field to your query 
} else { // this is optional 
    // don't add it to your query 
} 

// do the mysql update here