2011-12-01 54 views
2

某處我做錯了事,我的查詢結果爲true而不是false。在我的表中,id 246確實存在,但在表中lev爲零。我做錯了什麼,這個查詢應該導致錯誤。它回聲成功,但不更新表格。在php中的mysql查詢計算結果爲true

if (mysql_query("UPDATE ex_usrs SET lev = '1' WHERE id = '246' AND lev = '3'")) { 
echo "success"; 
} else { 
echo "fail"; 
} 

回答

1

docs

對於SELECT,SHOW,描述,解釋等語句返回 結果集,請求mysql_query()成功返回資源,或在 錯誤時返回FALSE。

對於其他類型的SQL語句,INSERT,UPDATE,DELETE,DROP等, mysql_query()在成功時返回TRUE或在錯誤時返回FALSE。

返回的結果資源應該傳遞給mysql_fetch_array(), 和其他函數來處理結果表,來訪問 返回的數據。

使用mysql_num_rows()來找出有多少行被返回的 SELECT語句或mysql_affected_rows()函數來找出有多少行 受到影響由DELETE,INSERT,REPLACE或UPDATE語句。

請勿使用mysql_query來檢查您是否確實更新了某些行。改爲使用mysql_affected_rows()

4

你沒有做錯什麼:因爲它是正確執行mysql_query語句返回true!
這並不意味着數據庫中的任何行都會更新。

+0

好的謝謝我現在明白了。當我更新記錄時,我的印象是真實的。 – Wilest

5

它返回true,因爲查詢是成功的,它會影響0行。如果您要檢查,如果事情實際上得到更新,使用

mysql_affected_rows 

link to documentation

0

從您的描述中,它聽起來像查詢正在運行,但沒有做任何更改。正如其他人所指出的那樣,這是預期的行爲。

您還表示,ID爲246的記錄的lev爲零。這說明更新失敗的原因。你只更新與編號246的記錄,如果列弗已被設置爲3,根據您的情況,下面的任一可能會更好地爲您:

if (mysql_query("UPDATE ex_usrs SET lev = '1' WHERE id = '246' AND lev = '0'")) { 
    echo "success"; 
} else { 
    echo "fail"; 
} 

或忽略當前狀態列弗完全:

if (mysql_query("UPDATE ex_usrs SET lev = '1' WHERE id = '246'")) { 
    echo "success"; 
} else { 
    echo "fail"; 
}