2012-01-31 61 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我可以複製和粘貼,它會執行就好了。它怎麼會是一個語法錯誤?

我知道這不是連接錯誤,我可以從該數據庫中的另一個表中提取數據。 有什麼我失蹤?

回答

5

PHP調用mysql_query允許在一次只有一個行動(如SQL注入prvention我猜的一部分),所以你有你的查詢拆分成兩個部分,並呼籲mysql_query兩次。

+0

你是認真的....謝謝.... – MrZander 2012-01-31 00:35:35

+0

@MrZander我不知道SQL injeciton是真正的原因,但我認爲這是爲了防止表單輸入,如:''); DROP TABLE用戶; - 對應用程序造成災難性影響。 – Vyktor 2012-01-31 00:39:25

+1

@Vyktor:你知道這幾乎是SQL注入的定義,對吧? :) – cHao 2012-01-31 00:41:19

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的更多信息。