您的SQL语法有错误;在Joomla中创建一个触发器

时间:2016-05-02 13:53:56

标签: mysql joomla triggers

我正在使用mysql,我想在Joomla 3.4.8中创建一个触发器。

我在mySQLWorkbench中有一个工作的sql代码: enter image description here

如果我在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部件时才会失败。任何的想法?是否有以面向对象的方式来做到这一点?

提前致谢!

1 个答案:

答案 0 :(得分:1)

我不是joomla专家,但似乎无论mysql api joomla用于执行sql语句,每次调用只能执行1个sql语句。尝试自己执行每个sql语句。