2013-06-26 35 views
2

我需要在PHP中運行db創建腳本。 使用multi_query我找到了一些麻煩觸發分隔符:PHP Mysqli multi_query和觸發器的分隔符

$sql=" 
CREATE TABLE `test` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT); 
DELIMITER ;; 
CREATE TRIGGER `tr_insert_test` AFTER INSERT ON `test` FOR EACH ROW BEGIN UPDATE log SET dirty = 1 WHERE data = DATE(NEW.emissione); END;; 
DELIMITER ;"; 
$mysqli->multi_query($sql); 

有了這個,我得到: 您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到在「DELIMITER;」附近使用的正確語法。 CREATE TRIGGER tr_insert_test在第1行'test'後插入

如果我在phpmyadmin中嘗試使用相同的腳本,它可以工作......你能告訴我爲什麼嗎? 謝謝

回答

1

由於multi_query(afaik)不處理自定義分隔符,最簡單的方法可能是將其分成兩個單獨的普通查詢,它們根本不需要分隔符;

<?php 
    $mysqli = new mysqli('localhost', 'test', '', 'test'); 

    $sql = "CREATE TABLE `test` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, emissione INT)"; 
    $mysqli->query($sql); 

    $sql = " 
    CREATE TRIGGER `tr_insert_test` AFTER INSERT ON `test` 
    FOR EACH ROW BEGIN 
     UPDATE log SET dirty = 1 WHERE data = DATE(NEW.emissione); 
    END 
    "; 
    $mysqli->query($sql); 
+2

我認爲這是mysqli_multi_query的一個愚蠢行爲:-( – Tobia