MySql:条件错误也能更新成功?

前几天Mysql给我变了个戏法,我在此也演示一下吧:

先建个表,添几条测试数据

id

status

content

1

1

hehe

2

0

lala



道具都准备好了,开始变魔术吧:

首先,我们来把id为1的内容给更新一下,写sql语句的时候不小点把条件里的status写错了:

1
UPDATE `test` SET content = 'hengheng' WHERE id =1 AND STATUS =0

结果显示:

怎么回事?执行成功了? 可是看看表里,id为1的值没有变啊!

再来看一下删除,我本想删除ID是2的记录的,这回又不小心把ID先错了:

1
DELETE FROM test WHERE id =3

仍然很神奇地显示着绿色的勾勾:

这是怎么回事呢?

我是在PHP里用PDO对数据更新时发现的这个问题,接口返回的TRUE,数据并没有改变,调试后发现是条件写错了,把SQL放到mysql里,同样执行成功。我又惊又喜:难道发现了mysql的一个bug?想想前人不可能没发现这样的问题呢,他们是怎么解决的呢?

查查手册发现PDO有个rowCount方法是用来返回影响的记录行数的(原生mysql里用的mysql_affected_rows函数)。

对于update和delete,不应该返回结果,而是通过这个影响的记录行数来判断。

坚持原创技术分享,您的支持将鼓励我继续创作!