我成功使用下面的run_sql_script()函数在PHP文件中执行SQL。
static public function run_sql_script($script)
{
// Load and explode the sql file
$f = fopen($script,"r+");
$sqlFile = fread($f,filesize($script));
$sqlFile=preg_replace("/\\\;/", ';', $sqlFile); //replace semicolons with ascii
$sqlArray = explode(';',$sqlFile);
//Process the sql file by statements
foreach ($sqlArray as $stmt)
{
if (strlen($stmt)>8)
{
//Used to prevent blank lines at end of sql script from executing
$stmt=preg_replace("/;/", ';', $stmt); //replace ascii with semicolons
try {db::db()->exec($stmt);}
catch(PDOException $e){library::sql_error($e,$stmt);}
}
}
return;
}
我使用MySQL Workbench生成SQL,最近,我还通过MySQL Workbench添加了一个触发器。它将以下SQL添加到文件中。
DELIMITER $$
CREATE TRIGGER tg_contacts_upd AFTER UPDATE ON contacts
FOR EACH ROW
....
BEGIN
END$$
DELIMITER ;
通过run_sql_script()函数运行新文件后,我现在收到以下错误。
查询错误:DELIMITER $$ CREATE TRIGGER tg_contacts_upd AFTER UPDATE ON联系人每个行开始结束$$ DELIMITER SQLSTATE [42000]: 语法错误或访问冲突:1064 SQL中有错误 句法;查看与MySQL服务器版本对应的手册 在'DELIMITER $$ CREATE TRIGGER附近使用正确的语法 tg_contacts_upd更新后第1行的每个联系人
任何建议如何修复
答案 0 :(得分:1)
似乎太容易了,但以下似乎有效。
static public function run_sql_script($script)
{
$sql = file_get_contents($script);
db::db()->exec($sql);
}