前几天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,不应该返回结果,而是通过这个影响的记录行数来判断。