私はmysqlを使用しています.Joomla 3.4.8でトリガーを作成したいと思います。私はJoomlaのコントローラでそれを実行した場合 SQL構文にエラーがあります。 Joomlaでトリガーを作成する
は:
$db = JFactory::getDbo();
$sql = $db->getQuery(true);
$sql = 'LOCK TABLES id0ap_virtuemart_products WRITE;
DROP TRIGGER IF EXISTS update_vm_products ;
DELIMITER //
CREATE TRIGGER update_vm_products
AFTER UPDATE
ON id0ap_virtuemart_products FOR EACH ROW
BEGIN
INSERT INTO id0ap_virtuemart_notifications
VALUES ("", NEW.virtuemart_product_id, "product","update");
END //
DELIMITER ;
UNLOCK TABLES;';
$db->setQuery($sql);
$db->execute();
私が手:
1064あなたが持っている
私はmySQLWorkbenchでの作品SQLコードを持っていますあなたのSQL構文のエラー。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、正しい構文が「DROP TRIGGER IF EXISTS update_vm_products」の近くで使用するようにしてください。 DELIMITER // '2行目SQL = LOCKテーブルid0ap_virtuemart_products WRITE;存在する場合はDROP TRIGGER if update_vm_products; DELIMITER // CREATE TRIGGER update_vm_products after update on id0ap_virtuemart_products各行ごとにINSERT INTO id0ap_virtuemart_notifications VALUES( ""、NEW.virtuemart_product_id、 "product"、 "update"); END // DELIMITER; UNLOCK TABLES;
私は問題を見つけることができません。しかし、私はそれを解決しようとしている間、私は何か奇妙なものを突き止めました。私はDELIMITERSを削除するSQLおよびDROP一部変更する場合:
$sql = 'CREATE TRIGGER update_vm_products
AFTER UPDATE
ON id0ap_virtuemart_products FOR EACH ROW
BEGIN
INSERT INTO id0ap_virtuemart_notifications
VALUES ("", NEW.virtuemart_product_id, "product","update");
END ;';
を使用すると、DROPパーツを追加するとき、あなたはそれが動作するトリガーを作成して、トリガーを作成しようとするかどうか、だけ失敗します。何か案が?これを行うためのオブジェクト指向の方法はありますか?
ありがとうございます!
複数のクエリ(PDO \ _MYSQL、PDO \ _MYSQLND)に対する[PDOサポート]の可能な複製(http://stackoverflow.com/questions/6346674/pdo-support-for-multiple-queries-pdo-mysql-pdo -mysqlnd) – middlestump
'LOCK TABLES'と 'DROP TRIGGER'は2つの異なるステートメントで、トリガの前に個別に実行する必要があります。また、PDOやmysqliライブラリ経由でトリガを実行するときに' delimiter'パーツは必要ありません。そして最後に 'UNLOCK TABLES;'を別の声明で出してください。試してみてください。 –
@middlestump私はなぜそれが可能なのか分かりません。質問は私とは関係がなく、答えはJoomlaでは不可能ではありません。 –