MySQL如何確認update,delete,insert語句成功執行?

來源:互聯網
上載者:User
如題,現在一直通過mysql_affected_rows()在判斷,這樣的話就造成幾乎每一句update,delete,insert後面必然要跟一句
if(mysql_affected_rows()!=1)
{
報錯
}

請問有什麼更簡便的辦法嗎?


回複討論(解決方案)

mysql_affected_rows 不是用於檢查執行是否成功的
而是用於觀察相關 sql 指令對多少記錄進行了操作

直接

if(執行sql語句){.....}else{......}

mysql_affected_rows 不是用於檢查執行是否成功的
而是用於觀察相關 sql 指令對多少記錄進行了操作


是我表述問題。我就是想判斷insert,delete,update語句成功地影響了至少1行

判斷影響了幾行mysql_affected_rows() 肯定是要執行的。

無論影響多少行(包括0行)都不是錯誤

無論影響多少行(包括0行)都不是錯誤


這我當然知道。。。

如題,現在一直通過mysql_affected_rows()在判斷,這樣的話就造成幾乎每一句update,delete,insert後面必然要跟一句
if(mysql_affected_rows()!=1)
{
報錯
}

請問有什麼更簡便的辦法嗎?



補充一下,我是要判斷update,delete,insert語句至少影響了1行,似乎大部分情況下都需要這樣的判斷邏輯
就是因為即使update,delete,insert影響了0行,事務也不會復原,所以會產生這個問題

update 沒有合格記錄,就不會修改,如果被修改的值和原值一樣,則修改不會真正發生
delete 沒有合格記錄,就不會刪除,如果有多條合格記錄,自然也就一併刪除了
insert 只會影響一條,哪怕是用縮減寫法的 insert 語句插入了 100 條

看不出這與事務有什麼關係

update 沒有合格記錄,就不會修改,如果被修改的值和原值一樣,則修改不會真正發生
delete 沒有合格記錄,就不會刪除,如果有多條合格記錄,自然也就一併刪除了
insert 只會影響一條,哪怕是用縮減寫法的 insert 語句插入了 100 條

看不出這與事務有什麼關係



想了一下,你說的有道理。
我把我的疑問舉個例子:
比如使用者要用虛擬貨幣購買虛擬物品,在update ... set money= ... where user_id=... 這條語句執行後,需不需要mysql_affected_rows()來驗證成功update了1行呢?我擔心沒真正update到money欄位,然後就執行了下面給該使用者添加虛擬物品的業務
如果在之前執行了select money from ... for update,就能保證萬無一失嗎?


update 沒有合格記錄,就不會修改,如果被修改的值和原值一樣,則修改不會真正發生
delete 沒有合格記錄,就不會刪除,如果有多條合格記錄,自然也就一併刪除了
insert 只會影響一條,哪怕是用縮減寫法的 insert 語句插入了 100 條

看不出這與事務有什麼關係



想了一下,你說的有道理。
我把我的疑問舉個例子:
比如使用者要用虛擬貨幣購買虛擬物品,在update ... set money= ... where user_id=... 這條語句執行後,需不需要mysql_affected_rows()來驗證成功update了1行呢?我擔心沒真正update到money欄位,然後就執行了下面給該使用者添加虛擬物品的業務
如果在之前執行了select money from ... for update,就能保證萬無一失嗎?


直接if (update操作....){購買成功...}else{購買失敗....}不就好了,update操作失敗返回的是false

$result = mysql_query("update ……")if ($result !== false){    echo "exec success";}else{    echo "exec error:".mysql_error():}



update 沒有合格記錄,就不會修改,如果被修改的值和原值一樣,則修改不會真正發生
delete 沒有合格記錄,就不會刪除,如果有多條合格記錄,自然也就一併刪除了
insert 只會影響一條,哪怕是用縮減寫法的 insert 語句插入了 100 條

看不出這與事務有什麼關係



想了一下,你說的有道理。
我把我的疑問舉個例子:
比如使用者要用虛擬貨幣購買虛擬物品,在update ... set money= ... where user_id=... 這條語句執行後,需不需要mysql_affected_rows()來驗證成功update了1行呢?我擔心沒真正update到money欄位,然後就執行了下面給該使用者添加虛擬物品的業務
如果在之前執行了select money from ... for update,就能保證萬無一失嗎?


直接if (update操作....){購買成功...}else{購買失敗....}不就好了,update操作失敗返回的是false



好的我決定試一下,看起來比mysql_affected_rows簡潔,不知道效果上有沒有什麼細微差別

$result = mysql_query("update ……")if ($result !== false){    echo "exec success";}else{    echo "exec error:".mysql_error():}



同上,謝謝,準備試一下效果

如果你不放心 update ... set money=money-1 會真實執行的話
那麼你是否需要再 select 一下,確認 money 減少了 1,而不是減少了 100 呢?

$result = mysql_query("update ……")
只有在 sql 指令是錯誤的情況下,才會返回 false
所以並不需要去試

如果你不放心 update ... set money=money-1 會真實執行的話
那麼你是否需要再 select 一下,確認 money 減少了 1,而不是減少了 100 呢?

$result = mysql_query("update ……")
只有在 sql 指令是錯誤的情況下,才會返回 false
所以並不需要去試

如果你不放心 update ... set money=money-1 會真實執行的話
那麼你是否需要再 select 一下,確認 money 減少了 1,而不是減少了 100 呢?

$result = mysql_query("update ……")
只有在 sql 指令是錯誤的情況下,才會返回 false
所以並不需要去試


好的,感覺你說的聽起來比較靠譜,謝謝。
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.