插入问题后创建触发器Mysql

时间:2016-08-04 20:35:54

标签: php mysql codeigniter

当我尝试通过codeigniter $this->db->query();添加mysql触发器查询时出现问题,但它显示语法错误。以下是代码:

  $this->db->query("DELIMITER $$ 
        CREATE TRIGGER `after_stuload_insert_info_data` AFTER INSERT 
        ON `{$this->tables->hesa_stuload_student_info}`
         FOR EACH ROW BEGIN 
          INSERT INTO `{$this->tables->hesa_student_reportperiod}` (hesa_course_relation_instance_id, student_data_id)
           VALUES (new.hesa_course_relation_instance_id, new.student_data_id); 
         END$$  
         DELIMITER ; ");

你能告诉我这段代码有什么问题吗?提前致谢。检查下面的错误。

enter image description here

2 个答案:

答案 0 :(得分:1)

DELIMITER是具有解析器查找分号的客户端的指令。使用脚本,您根本不会使用它。你也没有把$$放在最后。

就是这样:

$this->db->query("CREATE TRIGGER
... the rest of the trigger ...
END");

另外,如果您正在为表名使用变量(红旗!为什么要从Web代码创建触发器?),您可能还应该动态生成触发器名称。触发器名称在模式中必须是唯一的。

答案 1 :(得分:0)

您通常无法在单个请求中执行多个查询。很可能你需要做这样的事情:

  $this->db->query("DELIMITER $$"); 
  $this->db->query("CREATE TRIGGER `after_stuload_insert_info_data` AFTER INSERT 
        ON `{$this->tables->hesa_stuload_student_info}`
         FOR EACH ROW BEGIN 
          INSERT INTO `{$this->tables->hesa_student_reportperiod}` (hesa_course_relation_instance_id, student_data_id)
           VALUES (new.hesa_course_relation_instance_id, new.student_data_id); 
         END$$"); 
  $this->db->query("DELIMITER ; ");

根据另一个答案here,你甚至不需要在这种环境中创建触发器时的分隔符语句。