声明:UPDATE`blog_posts` SET`visit` =`visit` + 1 WHERE`id` = 14155 ORDER BY id LIMIT 1

时间:2016-12-22 23:28:57

标签: php mysql

我有这个PHP代码:

mysqli_query($link, 'UPDATE `blog_posts` SET `visit` = `visit` + 1 WHERE `id` = ' . $postid . ' ORDER BY id LIMIT 1');
在mysqld.log中

记录了这个错误如何修复问题?

  

[警告]自BINLOG_FORMAT = STATEMENT以来,使用语句格式将不安全语句写入二进制日志。该语句不安全,因为它使用LIMIT子句。这是不安全的,因为无法预测包含的行集。

说明:

UPDATE `blog_posts` SET `visit` = `visit` + 1 WHERE `id` = 14155 ORDER BY id LIMIT 1

1 个答案:

答案 0 :(得分:0)

正如错误所述,在limit语句中使用update子句是一种狡猾的做法,因为您无法准确预测哪些行会更新。然而,在这里,你很幸运。假设id列实际上是唯一标识符,在其上应用=条件最多只返回一行,因此limit 1子句只是多余的,您可以简单地丢弃它:

mysqli_query
($link, 'UPDATE `blog_posts` SET `visit` = `visit` + 1 WHERE `id` = ' . $postid);

强制性说明:
使用字符串操作生成SQL语句是一种危险的做法,可能会使您的代码容易受到SQL注入攻击。您应该考虑使用prepared statement代替。