在php5中,如何在具有分隔符的脚本中使用mysql_execute

时间:2011-10-07 05:39:47

标签: php mysql

有一个我可以在 mysql shell中复制并运行的脚本,但在php5 mysql_query中尝试相同的脚本时会爆炸。脚本的一部分:

-- sync shadow with users
drop trigger users_post_insert;
delimiter $$
create trigger users_post_insert after insert on users
    for each row
begin   
    insert into shadow( usr_id ) values( new.usr_id );
end$$
delimiter ;

引发错误:

You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near
'delimiter $$\ncreate trigger users_post_insert after insert
on users\n\tfor each ro' at line 8

同样,用PostgresQL和Oracle脚本完成了类似的执行脚本文件,所以这让我措手不及。

MySQL脚本是否需要在运行之前通过regex传递,或者是什么?

这些脚本已经过调试,然后通过php应用到新架构。

2 个答案:

答案 0 :(得分:1)

你可能需要在执行命令之前先定义分隔符,并确保删除已经创建的触发器(或者只使用if exists子句)试试这个

-- sync shadow with users
delimiter $$
drop trigger if exists users_post_insert;$$
create trigger users_post_insert after insert on users
    for each row
begin   
    insert into shadow( usr_id ) values( new.usr_id );
end;$$
delimiter ;

答案 1 :(得分:0)

测试显示mysql_execute无法接受DELIMITER命令。

要使其工作,请将文件分成块,完全省略DELIMITER行。例如,

    $procs = file_get_contents( '../sql/security.sql' ); 
    $procArr = preg_split( "/delimiter .*\n/", $procs );

此外,从剩余的块中删除set delimiter“$$”。

将每个非空的块添加到mysql_execute - 这很难看,但它有效。