2012-01-31 66 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的更多信息。