web-dev-qa-db-ja.com

$ wpdbとMySQLがトリガーを作成

$wpdbのメソッドはMySQLのCREATE TRIGGERクエリを受け付けませんか?私は$wpdb->query( $sql_trigger )を使って何度も何度も試してみましたが成功しませんでした。 phpMyAdminでcreate-trigger-queryを投げるとトリガーが作成されるので、クエリーは問題ないようです。

$sql_trigger = "DELIMITER //
                CREATE TRIGGER triggerName
                BEFORE UPDATE
                ON `table_name`
                FOR EACH ROW
                BEGIN
                    IF NEW.amount < 0 THEN
                        SET NEW.amount = 0;
                    ELSEIF NEW.amount > 100 THEN
                        SET NEW.amount = 100;
                    END IF;
                END; //
                DELIMITER ;
                ";

EddyRがmysqliを使ってトリガーを作成したのを読んでください。 https://wordpress.stackexchange.com/a/34653

Mysqlトリガーを作成するためにWPの「ネイティブ関数」を使用する方法はありませんか、それとも私は何か問題を起こしていますか?

edit:このようにDELIMITER設定とクエリを分離しても(またはDELIMITERを//から$$に変更しても)何も変わりません。まだ同じ問題です。

$sql_before_trigger = "DELIMITER $$";
$sql_after_trigger = "DELIMITER ;";

$wpdb->query( $sql_before_trigger );
$wpdb->query( $sql_trigger );
$wpdb->query( $sql_after_trigger );
5
chabi

あなたがリンクした質問では、解決策はSQLを実行するためのAPIとしてmysqli_multi_queryを使うことでした。 $ wpdbにはマルチクエリを実行するAPIがないため、直接使用することはできませんが、$wpdb->dbhからmysqlインターフェイスへのハンドルを取得して、次のようにすることができます。

$sql_trigger = "....";
mysqli_multi_query($wpdb->dbh,$sql_trigger);
5
Mark Kaplun