我在檢查MySQL更新語句是否成功時遇到問題。我想更新用戶的電子郵件。但他們必須用令牌授權給自己。我已經使用mysql_affected_rows bu當用戶提交與數據庫中的數據庫相同的電子郵件之前,受影響的行將是0而不是1. 我如何檢查用戶是否有該行令牌,即使新電子郵件和以前一樣嗎?PHP和MySQL檢查更新的行
UPDATE users SET email = '".$email."' WHERE token = '".$token."'
php
我在檢查MySQL更新語句是否成功時遇到問題。我想更新用戶的電子郵件。但他們必須用令牌授權給自己。我已經使用mysql_affected_rows bu當用戶提交與數據庫中的數據庫相同的電子郵件之前,受影響的行將是0而不是1. 我如何檢查用戶是否有該行令牌,即使新電子郵件和以前一樣嗎?PHP和MySQL檢查更新的行
UPDATE users SET email = '".$email."' WHERE token = '".$token."'
This user contribution PHP手冊爲mysql_affected_rows
中示出了哈克的方式來提取到mysql_info()
呼叫匹配行數。它真的是哈克,但。 (編輯:有一個在用戶的筆記another version爲mysql_info
這是比較普遍,但仍然哈克。)
我會做的是使用一個單獨的查詢:
"select count(token) as matches from users where token = $token"
我知道這是一個選項,但我正在搜索是否有辦法做到這一點1查詢 – user1013338
@ user1013338:我不認爲除了這裏列出的兩個之外還有一種方法。你可以使用一個存儲過程或'mysqli_multi_query()'來收集一次調用數據庫的信息。 – grossvogel
您可以使用mysql_affected_rows
。這是記錄在這裏:http://php.net/manual/en/function.mysql-affected-rows.php
對於exapmle:
mysql_query("UPDATE users SET email = '".$email."' WHERE token = '".$token."'");
echo "Rows with that token: ".mysql_affected_rows();
OP涉及令牌匹配但提供的電子郵件不是新的情況。在這種情況下(哪個OP認爲*成功*),'mysql_affected_rows()'將返回0. – grossvogel
我想你錯了。他問道:「即使新電子郵件與以前相同,我如何檢查該令牌是否有一行用戶?」。他說,「即使新的和以前一樣」。如果mysql_affected_rows()返回0,那麼沒有用戶擁有該令牌。這與他所要求的完全相反。 – gustavotkg
鏈接到的手冊頁上說:「使用UPDATE時,MySQL不會更新新值與舊值相同的列,這可能會導致mysql_affected_rows()實際上可能不匹配匹配的行數實際上受查詢影響的行數「。僅僅因爲'mysql_affected_rows()'返回0並不意味着沒有包含該標記的行。只有這個查詢沒有行*改變*。 – grossvogel
if(mysql_affected_rows() == 1)
//成功
OP涉及令牌匹配但提供的電子郵件不是新的情況。在這種情況下(OP認爲*成功*),'mysql_affected_rows()'將返回0. – grossvogel
而不是依賴於mysql_affected_rows的,是有可能,而不是依賴於的mysql_query函數的返回值?
例如
if (mysql_query ("UPDATE `users`
SET `email` = '".$email."'
WHERE `token` = '".$token."';")) { // success
} else { // fail
}
如果沒有行匹配,查詢仍然成功。如果出現語法錯誤,未知的表或列名稱,密鑰違規等,它應該只會失敗。 – grossvogel
確實如此,但並不完全清楚OP正試圖完成什麼。 如果這是一個問題,那麼我想你將不得不在UPDATE查詢之前嘗試SELECT查詢,並獲取使用mysql_num_rows的行數以確保您獲得匹配行的精確圖片。 – DaveL
在http://stackoverflow.com解釋/ questions/1188232 /奇怪的行爲與MySQL的受影響的行在PHP – jprofitt
我不會不知道你想在這裏實現什麼。你希望人們無法兩次選擇相同的電子郵件? –
@Truth:我的猜測是,如果令牌匹配,OP是否希望返回* success *消息,而不管查詢是否進行了實際*更改*。 – grossvogel