Php Mysqli更新集,其中语法错误

Php Mysqli更新集,其中语法错误,php,mysql,mysqli,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 comm

所以我有了这段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服务器版本对应的手册,以了解可在“更新注释集rgt=rgt+2,其中rgt>@myLeft; 更新第3行的“注释集”


但当我将sql查询放入Sequel Pro(Mac)中时,它运行良好。我尝试了许多其他帖子的解决方案,但没有一个奏效。我的语法有问题吗,或者mysql版本有问题吗?非常感谢。

这是因为您试图一次执行多条语句

Mysqli为此提供了一个功能

mysqli\u multi\u query()

请注意,找到的任何SQL注入现在都可以链接在一起。使用时要小心

安全考虑

API函数mysqli_query()和mysqli_real_query()不设置 在服务器中激活多个查询所需的连接标志。 对多个语句使用额外的API调用以减少 意外SQL注入攻击的可能性。攻击者可能会试图 添加以下语句:;删除数据库mysql或;选择睡眠(999)。 如果攻击者成功将SQL添加到语句字符串中,但 如果未使用mysqli_multi_查询,服务器将不会执行 二是注入恶意SQL语句


这是因为您试图一次执行多条语句

Mysqli为此提供了一个功能

mysqli\u multi\u query()

请注意,找到的任何SQL注入现在都可以链接在一起。使用时要小心

安全考虑

API函数mysqli_query()和mysqli_real_query()不设置 在服务器中激活多个查询所需的连接标志。 对多个语句使用额外的API调用以减少 意外SQL注入攻击的可能性。攻击者可能会试图 添加以下语句:;删除数据库mysql或;选择睡眠(999)。 如果攻击者成功将SQL添加到语句字符串中,但 如果未使用mysqli_multi_查询,服务器将不会执行 二是注入恶意SQL语句


谢谢!所以,如果我使用真正的逃逸字符串来防止注射,这就足够了吗?如果可能的话,更喜欢参数化查询!所以,如果我使用真正的逃逸字符串来防止注射,这就足够了吗?如果可能,首选参数化查询避免使用MySQL变量,除非它是过程的一部分。避免使用MySQL变量,除非它是过程的一部分。