当我尝试通过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 ; ");
你能告诉我这段代码有什么问题吗?提前致谢。检查下面的错误。
答案 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,你甚至不需要在这种环境中创建触发器时的分隔符语句。