如題,現在一直通過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
所以並不需要去試
好的,感覺你說的聽起來比較靠譜,謝謝。