Mysqli UPDATE SET WHERE语法错误

时间:2015-03-24 21:55:25

标签: php mysql mysqli

所以我有这段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版本出了什么问题?非常感谢。

1 个答案:

答案 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语句。