1

现在许多服务器都有最新版本的 MySQL - 在运行以下代码时会出错:

$drop_table = mysql_query("DROP TABLE IF EXISTS `$t_ads`");
$sqls[$t_ads] = "CREATE TABLE `$t_ads` (
  `adid` int unsigned NOT NULL auto_increment,
  `adtitle` varchar(100) NOT NULL default '',
  `addesc` longtext NOT NULL,
  `area` varchar(50) NOT NULL default '',
  `email` varchar(50) NOT NULL default '',
  `showemail` enum('0','1','2') NOT NULL default '0',
  `password` varchar(50) NOT NULL default '',
  `code` varchar(35) NOT NULL default '',
  `cityid` smallint unsigned NOT NULL default '0',
  `subcatid` smallint unsigned NOT NULL default '0',
  `price` DECIMAL( 10, 2 ) NOT NULL default '0',
  `othercontactok` enum('0','1') NOT NULL default '0',
  `hits` int unsigned NOT NULL default '0',
  `ip` varchar(15) NOT NULL default '',
  `verified` enum('0','1') NOT NULL default '0',
  `abused` int unsigned NOT NULL default '0',
  `enabled` enum('0','1') NOT NULL default '0',
  `createdon` datetime NOT NULL default '0000-00-00 00:00:00',
  `expireson` datetime NOT NULL default '0000-00-00 00:00:00',
  `timestamp` timestamp(14) NOT NULL,
  `paid` enum('0','1','2') NOT NULL default '2',
  PRIMARY KEY  (`adid`),
  KEY `subcatid` (`subcatid`),
  KEY `cityid` (`cityid`),
  KEY `verified` (`verified`),
  KEY `enabled` (`enabled`),
  KEY `paid` (`paid`)
) TYPE=MyISAM;";

具有旧版本 mysql 的服务器似乎接受了这一点,但新版本根本不接受它并给出错误。我有很多与它相关的错误,因为 PHP 数据库设置有点大。错误示例如下:

#1064- 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 21 行的 '(14) NOT NULL, paidenum, NOT NULL default '2', PRIMARY KEY ( adid), K'附近使用正确的语法

4

2 回答 2

1

您的代码的纯 SQL 部分看起来不错(刚刚使用 MySQL 5.6 对其进行了测试),尽管我通常建议不要将关键字timestamp用作列名。该表将在 MySQL 5.6 中创建,但您会遇到两个警告:

  1. 该语法TIMESTAMP(14)已弃用,将在 MySQL 6.0 中删除。请TIMESTAMP改用
  2. 该语法TYPE=storage_engine已弃用,将在 MySQL 6.0 中删除。请ENGINE=storage_engine改用

如果这没有帮助,请发布您正在使用的实际 MySQL 版本。

于 2012-09-26T04:24:52.497 回答
0

更改您的列名,它不应该是 mysql 关键字 'timestamp' 和

改变

`timestamp` timestamp(14) NOT NULL,

`<SOME OTHERNAME>` timestamp NOT NULL,
于 2012-09-26T04:23:46.853 回答