SQL-запрос для вставки нового узла в таблицу с использованием модели вложенного набора не выполняется - PullRequest
0 голосов
/ 22 апреля 2011

В настоящее время я работаю с моделью вложенного множества и прочитал статью с сайта 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

Я надеюсь, что кто-то может помочь мне с этим.

1 Ответ

0 голосов
/ 22 апреля 2011

MySQLi::prepare работает только с запросами с одним оператором.

Вы должны разбить ваш запрос на серию отдельных операторов, подготовить их и подготовить независимо.

В качестве альтернативы, оберните вашПакет в хранимую процедуру и вызвать ее.

...