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