MySQL如何确认update,delete,insert语句成功执行?

WBOY
풀어 주다: 2016-06-23 13:26:03
원래의
2717명이 탐색했습니다.

如题,现在一直通过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 
所以并不需要去试


好的,感觉你说的听起来比较靠谱,谢谢。
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿