我正在使用mysql,我想在Joomla 3.4.8中创建一个触发器。
如果我在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您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'DROP TRIGGER IF EXISTS update_vm_products附近使用正确的语法; DELIMITER //'第2行SQL = LOCK TABLES id0ap_virtuemart_products WRITE; DROP TRIGGER IF EXISTS update_vm_products; DELIMITER //创建TRIGGER update_vm_products更新后id0ap_virtuemart_products每次行开始插入id0ap_virtuemart_notifications值(“”,“NEW.virtuemart_product_id”,“product”,“update”);结束// DELIMITER;解锁表格;
我找不到问题。但是当我试图解决它时,我发现了一些奇怪的东西。如果我修改sql删除DELIMITERS和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部件时才会失败。任何的想法?是否有以面向对象的方式来做到这一点?
提前致谢!
答案 0 :(得分:1)
我不是joomla专家,但似乎无论mysql api joomla用于执行sql语句,每次调用只能执行1个sql语句。尝试自己执行每个sql语句。