0

私は現在、ネストされたセット モデルを使用しており、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

誰かがこれで私を助けてくれることを願っています。

4

1 に答える 1

0

MySQLi::prepare単一ステートメントのクエリでのみ機能します。

クエリを一連の単一のステートメントに分割し、それらを準備して個別に発行する必要があります。

または、バッチをストアド プロシージャにラップして呼び出します。

于 2011-04-22T10:32:23.333 に答える