所以我有这段PHP代码
if($_POST['action']=='newComment')
{
$mysqli = new mysqli("localhost", "root", "", "nested_comment");
$new_post = $mysqli->real_escape_string($_POST['content']);
$result = $mysqli->query("SELECT @myLeft := lft FROM comment
WHERE lft = '1';
UPDATE comment SET rgt = rgt + 2 WHERE rgt > @myLeft;
UPDATE comment SET lft = lft + 2 WHERE lft >= @myLeft;
INSERT INTO comment(content, lft, rgt) VALUES('$new_post', @myLeft, @myLeft + 1);");
if($result)
echo "ok";
else
echo $mysqli->error;
}
当我运行它时,会抛出错误:
您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在附近使用&n;更新注释SET rgt = rgt + 2 WHERE rgt> @myLeft; 更新评论SET'在第3行
但是当我将sql查询放入Sequel Pro(Mac)时,它运行良好。我试过很多其他帖子'解决方案,但没有一个工作。我的语法有问题,或者mysql版本出了什么问题?非常感谢。
答案 0 :(得分:5)
这是因为你试图一次执行多个语句
http://php.net/manual/en/mysqli.quickstart.multiple-statement.php
Mysqli有一个功能
mysqli_multi_query()
请注意,现在可以将找到的任何SQL注入链接在一起。使用时要小心
安全注意事项
API函数mysqli_query()和mysqli_real_query()不设置 激活服务器中的多个查询所需的连接标志。 额外的API调用用于多个语句以减少 意外SQL注入攻击的可能性。攻击者可能会尝试 添加诸如的陈述; DROP DATABASE mysql或;选择休眠(999)。 如果攻击者成功将SQL添加到语句字符串中,但是 没有使用mysqli_multi_query,服务器不会执行 第二,注入和恶意的SQL语句。