创建触发器之前的分隔符出现MySQL语法错误
我正在尝试将我用Firebird制作的触发器重写为MySql触发器 我真的不知道会是什么。如果有人能帮我。。。谢谢 我正在用PHP提交SQL,如下所示,错误消息是: 无效查询:SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的FORMA_PGTO上插入后在“DELIMITER$$CREATE TRIGGER FP_PAGO_AI”附近使用的正确语法 触发器的代码为:创建触发器之前的分隔符出现MySQL语法错误,mysql,triggers,Mysql,Triggers,我正在尝试将我用Firebird制作的触发器重写为MySql触发器 我真的不知道会是什么。如果有人能帮我。。。谢谢 我正在用PHP提交SQL,如下所示,错误消息是: 无效查询:SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的FORMA_PGTO上插入后在“DELIMITER$$CREATE TRIGGER FP_PAGO_AI”附近使用的正确语法 触发器的代码为: $str[] = " DELIMITER $$ CREATE TRIGGER FP_PAGO_AU
$str[] = "
DELIMITER $$
CREATE TRIGGER FP_PAGO_AU AFTER UPDATE ON FORMA_PGTO
FOR EACH ROW
BEGIN
declare rec_count integer;
declare pg_count integer;
declare cp_pago integer;
select count(*) from forma_pgto fp where fp.id_cpagar=new.id_cpagar into rec_count;
select count(pago) from forma_pgto f where f.id_cpagar=new.id_cpagar and f.pago=1 into pg_count;
/* Se todas parcelas estao pagas, entao setar conta paga */
if (rec_count = pg_count) then
update cpagar c set c.pago=1 where c.id=new.id_cpagar;
/* Senao */
else
/* Se CPAGAR.PAGO = 1, recebe 0 */
select cpg.pago from cpagar cpg where cpg.id=new.id_cpagar into cp_pago;
if (cp_pago = 1) then /* Se cp_pago = 1 */
update cpagar set pago=0 where id=new.id_cpagar;
end if;
end if;
END
END $$
DELIMITER ;
";
直接在PhpAdmin中执行,并删除一个冗余
END
DELIMITER $$
CREATE TRIGGER FP_PAGO_AU AFTER UPDATE ON FORMA_PGTO
FOR EACH ROW
BEGIN
declare rec_count integer;
declare pg_count integer;
declare cp_pago integer;
select count(*) from forma_pgto fp where fp.id_cpagar=new.id_cpagar into rec_count;
select count(pago) from forma_pgto f where f.id_cpagar=new.id_cpagar and f.pago=1 into pg_count;
/* Se todas parcelas estao pagas, entao setar conta paga */
if (rec_count = pg_count) then
update cpagar c set c.pago=1 where c.id=new.id_cpagar;
/* Senao */
else
/* Se CPAGAR.PAGO = 1, recebe 0 */
select cpg.pago from cpagar cpg where cpg.id=new.id_cpagar into cp_pago;
if (cp_pago = 1) then /* Se cp_pago = 1 */
update cpagar set pago=0 where id=new.id_cpagar;
end if;
end if;
END $$
DELIMITER ;
您根本不需要
分隔符$$
。这是一个好主意。SQL解析器无法识别客户端内置项
您只需将CREATE TRIGGER
语句作为单个语句执行,然后就不需要在语句末尾使用分隔符了。分隔符仅在支持多个语句的接口(例如mysql客户端)中重要
phpMyAdmin还允许多个语句,因此您确实需要设置分隔符,但这是通过用户界面控件完成的,而不是
delimiter
命令。请参见将此消息发送到MySQL的方法一次只能执行一条语句<代码>分隔符$$是一条语句。您是指PHP mysql\u查询函数吗?无论如何,我试图直接在phpMyAdmin中提交查询,但它返回了另一个错误:#1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解第26行“END”附近使用的正确语法。我编辑了标题以修复拼写错误,但要求我重新编写标题,因为该标题已经是另一个问题。确实如此。它有一个额外的末端。