当我尝试在PHP MySQL I中执行它时,这个查询会给出语法错误,但在MySQL CLI中执行时不会。有人能告诉我这里发生了什么吗。
以下是问题:
DROP TABLE IF EXISTS `wp_commentmeta`;
CREATE TABLE `wp_commentmeta` (
`meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`comment_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`meta_key` varchar(255) DEFAULT NULL,
`meta_value` longtext,
PRIMARY KEY (`meta_id`),
KEY `comment_id` (`comment_id`),
KEY `meta_key` (`meta_key`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
下面是测试代码:
<?php
$sql="
DROP TABLE IF EXISTS `wp_commentmeta`;
CREATE TABLE `wp_commentmeta` (
`meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`comment_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`meta_key` varchar(255) DEFAULT NULL,
`meta_value` longtext,
PRIMARY KEY (`meta_id`),
KEY `comment_id` (`comment_id`),
KEY `meta_key` (`meta_key`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
";
$conn=mysqli_connect('localhost','root','yesthereis','test');
if(mysqli_query($conn, $sql)){
echo "Inserted\n";
}else{
echo "Failed\n".mysqli_error($conn)."\n";
}
?>
……这就是执行:
jgalley@jgalley-debian:~/code/$ php test.php
Failed
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE `wp_commentmeta` (
`meta_id` bigint(20) unsigned NOT NULL AUT' at line 2
如您所见,它在CLI中运行良好:
jgalley@jgalley-debian:~/code/mysqlsync2$ mysql -u root -p'yesthereis' test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 213
Server version: 5.1.63-0+squeeze1 (Debian)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> DROP TABLE IF EXISTS `wp_commentmeta`;
Query OK, 0 rows affected, 1 warning (0.05 sec)
mysql> CREATE TABLE `wp_commentmeta` (
-> `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-> `comment_id` bigint(20) unsigned NOT NULL DEFAULT '0',
-> `meta_key` varchar(255) DEFAULT NULL,
-> `meta_value` longtext,
-> PRIMARY KEY (`meta_id`),
-> KEY `comment_id` (`comment_id`),
-> KEY `meta_key` (`meta_key`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.01 sec)
mysql> quit
Bye
最佳答案
不能在一个mysqli_query
调用中运行两个查询。将查询字符串一分为二并分别执行它们。(或者,正如视频在评论中正确指出的那样,使用mysqli_multi_query
作为脚本中mysqli_query
的替换项。)
这有助于减少SQL注入。
关于php - 特定查询语法在php mysqli中无效,但在MySQL CLI中无效。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13964316/