PHP& MySQL,好的查询失败了

时间:2012-01-31 00:32:43

标签: php mysql

我遇到了PHP和MySQL的奇怪问题。 为了尝试从PHP创建表,我已经将我需要的查询粘贴到PHP中,该查询在PHP环境之外成功执行。

    $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时,我可以复制并粘贴,它会执行得很好。怎么会出现语法错误?

我知道这不是连接错误,我可以从该数据库中的另一个表中提取数据。 有什么我想念的吗?

4 个答案:

答案 0 :(得分:5)

mysql_query的PHP调用当时只允许一个操作(作为SQL注入预防的一部分,我猜)所以你必须将查询分成两部分并调用{{ 1}}两次。

答案 1 :(得分: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();
}

答案 2 :(得分:0)

从文档到mysql_query

  

mysql_query()发送一个唯一的查询(多个查询不是   支持)到服务器上当前活动的数据库   与指定的link_identifier相关联。

答案 3 :(得分:0)

mysql_query只能执行单个查询,它不支持执行多个查询。它还建议不要用分号结束查询。

PHP documentation

中查找更多信息