我有这个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
答案 0 :(得分:0)
正如错误所述,在limit
语句中使用update
子句是一种狡猾的做法,因为您无法准确预测哪些行会更新。然而,在这里,你很幸运。假设id
列实际上是唯一标识符,在其上应用=
条件最多只返回一行,因此limit 1
子句只是多余的,您可以简单地丢弃它:
mysqli_query
($link, 'UPDATE `blog_posts` SET `visit` = `visit` + 1 WHERE `id` = ' . $postid);
强制性说明:
使用字符串操作生成SQL语句是一种危险的做法,可能会使您的代码容易受到SQL注入攻击。您应该考虑使用prepared statement代替。