使用嵌套集模型在表中插入新节点的SQL查询执行失败


SQL query for inserting a new node in a table using the nested set model fails to execute

我目前正在使用嵌套集模型,我已经阅读了MySQL网站上的文章(管理MySQL中的分层数据)。

我直接从文章中得到了以下查询:

LOCK TABLE categories WRITE;
SELECT @myRight := right FROM categories WHERE name = ?;
UPDATE categories SET right = right + 2 WHERE right > @myRight;
UPDATE categories SET left = lft + 2 WHERE left > @myRight;
INSERT INTO categories (name, left, right) VALUES(?, @myRight + 1, @myRight + 2);
UNLOCK TABLES;

我使用PHP和MySQLi函数像这样执行这个语句:

if (false !== $stmt = $mysqli->prepare($query)) {
    $stmt->bind_param('ss', 'services', 'hosting');
    $stmt->execute();
    $stmt->close();
} else {
    echo $mysqli->error;
}

下面的代码产生一个语法错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT @myRight := right FROM categories WHERE name = ?; UPDATE categories SET righ' at line 3

我希望有人能帮我一下。

MySQLi::prepare只适用于单语句查询。

你应该把你的查询分解成一系列单独的语句,准备好那些可准备的语句,然后独立地发出它们。

或者,将批处理封装到一个存储过程中并调用它