安装脚本 MySQL 语法错误“您的 SQL 语法有错误; [...]”
我的网站上有一个安装脚本,当我运行它时,它给了我这个错误:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 2 行的“CREATE TABLE
active_guests
”(ip
varchar(15) collate latin1_general_' at line 2
这是代码似乎有错误:
$sql = 'SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE `active_guests` (
`ip` varchar(15) collate latin1_general_ci NOT NULL,
`timestamp` int(11) unsigned NOT NULL,
PRIMARY KEY (`ip`)
);';
mysql_query($sql,$con) or die(mysql_error());
$sql = 'CREATE TABLE `active_users` (
`username` varchar(30) collate latin1_general_ci NOT NULL,
`timestamp` int(11) unsigned NOT NULL,
PRIMARY KEY (`username`)
);';
mysql_query($sql,$con) or die(mysql_error());
$sql = 'CREATE TABLE `banned_users` (
`username` varchar(30) collate latin1_general_ci NOT NULL,
`timestamp` int(11) unsigned NOT NULL,
PRIMARY KEY (`username`)
);';
此后它还会继续,但基本上是这样的,有人可以解决这个问题吗?
I have an install script on my website, and when i run it, it gives me thsi error:
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
active_guests
(ip
varchar(15) collate latin1_general_' at line 2
Here is the code where it seems to bug:
$sql = 'SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE `active_guests` (
`ip` varchar(15) collate latin1_general_ci NOT NULL,
`timestamp` int(11) unsigned NOT NULL,
PRIMARY KEY (`ip`)
);';
mysql_query($sql,$con) or die(mysql_error());
$sql = 'CREATE TABLE `active_users` (
`username` varchar(30) collate latin1_general_ci NOT NULL,
`timestamp` int(11) unsigned NOT NULL,
PRIMARY KEY (`username`)
);';
mysql_query($sql,$con) or die(mysql_error());
$sql = 'CREATE TABLE `banned_users` (
`username` varchar(30) collate latin1_general_ci NOT NULL,
`timestamp` int(11) unsigned NOT NULL,
PRIMARY KEY (`username`)
);';
It continues even more after that, but basically it's this. Anyone could clear things up? Thanks in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
每次调用
mysql_query()
时只能运行一条语句。因此,您必须运行 SET SQL_MODE ...,然后单独运行第一个
CREATE TABLE ...
回复您的评论:我建议您坚持每次调用运行一个语句到
mysql_query()
或 mysqli 或 PDO 中的等效项。这样做确实没有什么明显的缺点,而且它是防止某些形式的SQL 注入的好方法。You can only run one statement per call to
mysql_query()
.So you have to run
SET SQL_MODE ...
and then separately run the firstCREATE TABLE ...
Re your comment: I recommend that you stick with running one statement per call to
mysql_query()
or its equivalent in mysqli or PDO. There's really no significant downside to doing it, and it's a good way to prevent some forms of SQL injection.