2013-06-26 3 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 ;; 트리거 생성하기 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