我遇到了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
时,我可以复制并粘贴,它会执行得很好。怎么会出现语法错误?
我知道这不是连接错误,我可以从该数据库中的另一个表中提取数据。 有什么我想念的吗?
答案 0 :(得分:5)
对mysql_query
的PHP调用当时只允许一个操作(作为SQL注入预防的一部分,我猜)所以你必须将查询分成两部分并调用{{ 1}}两次。
答案 1 :(得分:1)
mysql_query()
函数一次只能执行一个查询,而您可以在命令行执行任意数字。
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
只能执行单个查询,它不支持执行多个查询。它还建议不要用分号结束查询。