我有一个SQL查询,如果我通过PhpMyAdmin手动运行它,它可以完美地工作,但是,当从PHP执行时,它无法执行。
查询:
LOCK TABLE table_name WRITE;
SELECT @myRight := rgt FROM table_name
WHERE name = 'feildname';
UPDATE table_name SET rgt = rgt + 2 WHERE rgt > @myRight;
UPDATE table_name SET lft = lft + 2 WHERE lft > @myRight;
INSERT INTO table_name(name, lft, rgt) VALUES('new_feild_value', @myRight + 1, @myRight + 2);
UNLOCK TABLES;
我想通过我的PHP页面运行查询,该页面有来自用户输入的new_feild_value
变量,可以在下面的代码中看到:
<?php
$newname = $_POST['newname'];
$sqlquery = 'LOCK TABLE table_name WRITE;
SELECT @myRight := rgt FROM table_name
WHERE name = "feildname";
UPDATE table_name SET rgt = rgt + 2 WHERE rgt > @myRight;
UPDATE table_name SET lft = lft + 2 WHERE lft > @myRight;
INSERT INTO table_name(name, lft, rgt) VALUES("' .$newname . '", @myRight + 1, @myRight + 2);
UNLOCK TABLES;';
if(!mysqli_query($link,$sqlquery)){ //$link is variable to make sql connection
echo 'error inserting the comment';
exit();
}
echo 'successfully inserted the values';
?>
上面的PHP代码段不起作用,但对于同一代码段,其他简单的查询也起作用。问题出在哪里?我该如何解决?
必须使用mysqli_multi_query在一条带有mysqli的语句中运行多个查询。http://php.net/manual/en/mysqli.multi-query.php