创建触发器之前的分隔符出现MySQL语法错误

创建触发器之前的分隔符出现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

我正在尝试将我用Firebird制作的触发器重写为MySql触发器

我真的不知道会是什么。如果有人能帮我。。。谢谢

我正在用PHP提交SQL,如下所示,错误消息是:

无效查询:SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的FORMA_PGTO上插入后在“DELIMITER$$CREATE TRIGGER FP_PAGO_AI”附近使用的正确语法

触发器的代码为:

$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”附近使用的正确语法。我编辑了标题以修复拼写错误,但要求我重新编写标题,因为该标题已经是另一个问题。确实如此。它有一个额外的末端。