0
我成功使用下面的run_sql_script()函數在使用PHP的文件中執行SQL。使用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後 更新爲每個排接點BEGIN END $$ DELIMITER SQLSTATE [42000]: 語法錯誤或訪問衝突:1064你在你的SQL 有一個錯誤句法;檢查對應於你的MySQL服務器版本 爲使用附近的正確的語法手冊「DELIMITER $$ CREATE TRIGGER tg_contacts_upd更新後的通訊錄FOR EACH」在行1
任何建議如何解決