2012-01-31 4 views
2

PHP와 MySQL에 이상한 문제가 있습니다. PHP에서 테이블을 만들 때 필자는 PHP 환경 외부에서 PHP로 성공적으로 실행되는 필요한 쿼리를 붙여 넣었습니다. PHP와 MySQL, 좋은 쿼리가 실패했습니다

$CREATE_PAGES = "DROP TABLE IF EXISTS `MyDatabase`.`pages`; 
       CREATE TABLE `MyDatabase`.`pages` (
        `Page_ID` int(10) unsigned NOT NULL AUTO_INCREMENT, 
        `Page_File` varchar(1000) NOT NULL, 
        `Page_Description` varchar(1000) NOT NULL, 
        `Page_Message` longtext NOT NULL, 
        PRIMARY KEY (`Page_ID`) 
       ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;"; 
    $result= mysql_query($CREATE_PAGES,$link); 

    if(!($result)){ 
     echo mysql_error(); 
     echo $CREATE_PAGES; 
    } 

그럼 내가 그러나 표준 오류 메시지

. . . for the right syntax to use near 'CREATE TABLE `MyDatabase`.`pages` (`Page_ID` int(10) unsigned NOT NULL' at line 2 

를 얻을, 이상한 부분은 내가 쿼리 $CREATE_PAGES를 에코 때 복사 및 붙여 넣기하고 잘 실행할 수 있다는 것입니다. 어떻게 구문 오류가 될 수 있습니까?

연결 오류가 아닙니다. 데이터베이스의 다른 테이블에서 데이터를 가져올 수 있습니다. 누락 된 것이 있습니까? mysql_query

답변

5

PHP 호출 (I 추측 SQL 주입 prvention의 일부로서) 시간에 하나의 행동 수 있습니다 그래서 당신은 두 부분으로 쿼리를 분할하고 두 번 mysql_query를 호출해야합니다.

+0

진지한가 .... 고마워 .... – MrZander

+0

@MrZander SQL injeciton이 진짜 이유인지는 모르겠다.하지만이 형식 입력을 방지하기위한 것이라고 생각한다. DROP TABLE 사용자; -'응용 프로그램에 치명적인 영향을 미치지 못하게합니다. – Vyktor

+1

@Vyktor : SQL 삽입에 대한 정의는 거의 알고 있습니다. 맞습니까? :) – cHao

1

mysql_query() 함수는 한 번에 하나의 쿼리 만 실행할 수 있지만 명령 줄에서는 임의의 숫자를 실행할 수 있습니다. the documentation에서

:

는 mysql_query() 지정된 link_identifier를와 연관된 서버에서 현재 활성화 된 데이터베이스에 고유 한 쿼리를 (여러 쿼리가 지원되지 않습니다) 보냅니다.

이를 극복하려면 문서에서

$dropTable = "DROP TABLE IF EXISTS `MyDatabase`.`pages`"; 
mysql_query($dropTable, $link); 

$createPages ="CREATE TABLE `MyDatabase`.`pages` (
        `Page_ID` int(10) unsigned NOT NULL AUTO_INCREMENT, 
        `Page_File` varchar(1000) NOT NULL, 
        `Page_Description` varchar(1000) NOT NULL, 
        `Page_Message` longtext NOT NULL, 
        PRIMARY KEY (`Page_ID`) 
       ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;"; 
$result = mysql_query($createPages, $link); 

if(!($result)) { 
     echo mysql_error(); 
} 
0

mysql_query에 :

는 mysql_query()는에 현재 활성화 된 데이터베이스에 고유 한 쿼리를 (여러 쿼리가 지원 되지 않습니다) 전송 서버는 지정된 link_identifier와 연결된 입니다.

0

mysql_query은 단일 쿼리 만 실행할 수 있으며 다중 쿼리 실행을 지원하지 않습니다. 질의를 세미콜론으로 끝내지 않는 것이 좋습니다.

자세한 내용은 PHP documentation에서 확인하십시오.