2010-03-30 1 views
2

다음과 같은 PHP 코드를 사용하여 트리거를 생성하지만 항상 오류가 발생합니다. 해결 방법을 알려주십시오.다음과 같은 PHP 코드를 사용하여 트리거를 생성하지만 항상 오류가 발생합니다. 해결 방법을 알려주십시오.

Error ExistYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$$ DROP TRIGGER `update_data` $$ CREATE TRIGGER `update_data` AFTER UPDATE on `j' at line 1 

이 내 트리거를 만들 도와주세요

답변

1

오류는 잘못을 정확히 알려줍니다 ... :로

$link = mysql_connect('localhost','root','rainserver'); 
    mysql_select_db('information_schema'); 
       echo $trgquery = "DELIMITER $$ DROP TRIGGER `update_data` $$ CREATE TRIGGER `update_data` AFTER UPDATE on `jos_menu` FOR EACH ROW BEGIN 
IF (NEW.menutype != OLD.menutype) THEN 
INSERT INTO jos_menuaudit set menuid=OLD.id, oldvalue = OLD.menutype, newvalue = NEW.menutype, field = 'menutype'; 
END IF; 
IF (NEW.name != OLD.name) THEN 
INSERT INTO jos_menuaudit set menuid=OLD.id, oldvalue = OLD.name, 

newvalue = NEW.name, field = 'name'; 
END IF; 
IF (NEW.alias != OLD.alias) THEN 
INSERT INTO jos_menuaudit set menuid=OLD.id, oldvalue = OLD.alias, 

newvalue = NEW.alias, field = 'alias'; 
END IF; 
END$$ DELIMITER ;"; 
       echo "<br>"; 
     //$trig = mysqli_query($link,$trgquery) or die("Error Exist".mysqli_error($link)); 
     $trig = mysql_query($trgquery) or die("Error Exist".mysql_error()); 

가 나는 오류가 발생합니다. DELIMITER $$ DROP ...은 유효한 문이 아닙니다. 그 이유 중 하나는 delimiter이 MySQL 명령이며 진술이 아니기 때문입니다. 또 다른 이유는 "DELIMITER $$"의 "$$"이 명령의 일부이므로 명령을 종료하지 않기 때문입니다. 여전히 구획 문자를 포함해야합니다.

설명서에 따르면 mysql_query은 다중 명령문을 지원하지 않으므로 각각에 대해 별도의 쿼리를 실행해야합니다. 더 나은 아직, 하나의 쿼리에서 다중 문에 대해 multi_query 함수가 작동하는 최신 mysqli 드라이버로 전환하십시오. mysqli는 또한 준비된 문장을 지원하는데, 이것은 당신의 예제에서 그렇게 중요하지 않지만, 대부분의 다른 상황에서는 그렇다. PDO도 새롭고 prepared statements을 지원하며 PDO MySQL 드라이버가 다중 쿼리를 지원한다고 생각합니다.

트리거 대신에 행 기반 binary logging은 데이터베이스의 테이블 변경 사항을 기록합니다.

+0

감사 Outis .. 우르 가이드 내 문제를 해결, 나는 별도로 쿼리를 실행 ... 감사합니다 다시 –

관련 문제