php
  • mysql
  • 2011-10-26 71 views 2 likes 
    2

    我在檢查MySQL更新語句是否成功時遇到問題。我想更新用戶的電子郵件。但他們必須用令牌授權給自己。我已經使用mysql_affected_rows bu當用戶提交與數據庫中的數據庫相同的電子郵件之前,受影響的行將是0而不是1. 我如何檢查用戶是否有該行令牌,即使新電子郵件和以前一樣嗎?PHP和MySQL檢查更新的行

    UPDATE users SET email = '".$email."' WHERE token = '".$token."' 
    
    +1

    在http://stackoverflow.com解釋/ questions/1188232 /奇怪的行爲與MySQL的受影響的行在PHP – jprofitt

    +0

    我不會不知道你想在這裏實現什麼。你希望人們無法兩次選擇相同的電子郵件? –

    +2

    @Truth:我的猜測是,如果令牌匹配,OP是否希望返回* success *消息,而不管查詢是否進行了實際*更改*。 – grossvogel

    回答

    1

    This user contribution PHP手冊爲mysql_affected_rows中示出了哈克的方式來提取到mysql_info()呼叫匹配行數。它真的是哈克,但。 (編輯:有一個在用戶的筆記another versionmysql_info這是比較普遍,但仍然哈克。)

    我會做的是使用一個單獨的查詢:
    "select count(token) as matches from users where token = $token"

    +0

    我知道這是一個選項,但我正在搜索是否有辦法做到這一點1查詢 – user1013338

    +0

    @ user1013338:我不認爲除了這裏列出的兩個之外還有一種方法。你可以使用一個存儲過程或'mysqli_multi_query()'來收集一次調用數據庫的信息。 – grossvogel

    -1

    您可以使用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(); 
    
    +0

    OP涉及令牌匹配但提供的電子郵件不是新的情況。在這種情況下(哪個OP認爲*成功*),'mysql_affected_rows()'將返回0. – grossvogel

    +0

    我想你錯了。他問道:「即使新電子郵件與以前相同,我如何檢查該令牌是否有一行用戶?」。他說,「即使新的和以前一樣」。如果mysql_affected_rows()返回0,那麼沒有用戶擁有該令牌。這與他所要求的完全相反。 – gustavotkg

    +0

    鏈接到的手冊頁上說:「使用UPDATE時,MySQL不會更新新值與舊值相同的列,這可能會導致mysql_affected_rows()實際上可能不匹配匹配的行數實際上受查詢影響的行數「。僅僅因爲'mysql_affected_rows()'返回0並不意味着沒有包含該標記的行。只有這個查詢沒有行*改變*。 – grossvogel

    -1

    if(mysql_affected_rows() == 1) //成功

    +0

    OP涉及令牌匹配但提供的電子郵件不是新的情況。在這種情況下(OP認爲*成功*),'mysql_affected_rows()'將返回0. – grossvogel

    0

    而不是依賴於mysql_affected_rows的,是有可能,而不是依賴於的mysql_query函數的返回值?

    例如

    if (mysql_query ("UPDATE `users` 
    SET `email` = '".$email."' 
    WHERE `token` = '".$token."';")) { // success 
    } else { // fail 
    } 
    
    +0

    如果沒有行匹配,查詢仍然成功。如果出現語法錯誤,未知的表或列名稱,密鑰違規等,它應該只會失敗。 – grossvogel

    +0

    確實如此,但並不完全清楚OP正試圖完成什麼。 如果這是一個問題,那麼我想你將不得不在UPDATE查詢之前嘗試SELECT查詢,並獲取使用mysql_num_rows的行數以確保您獲得匹配行的精確圖片。 – DaveL

    相關問題