提问人:Jeff 提问时间:1/8/2010 最后编辑:OMG PoniesJeff 更新时间:2/3/2011 访问量:1748
这个PHP-MySQL CREATE TABLE查询有什么问题?
What's wrong with this PHP-MySQL CREATE TABLE query?
问:
首先,我刚刚开始用PHP学习MySQL。
我的查询直接从我的 IDE 复制/粘贴:
$query = "CREATE TABLE IF NOT EXISTS $table_messages (
id int(11) unsigned NOT NULL auto_increment,
show tinyint(1) unsigned NOT NULL default '0',
to varchar(255) NOT NULL default '',
from varchar(255) NOT NULL default '',
type varchar(255) NOT NULL default '',
message varchar(255) NOT NULL default '',
PRIMARY KEY(id)
) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
$result = mysql_query( $query, $link ) OR exit ( mysql_error() );
导致此错误:
您的 SQL 语法有错误; near 'show tinyint(1) unsigned NOT NULL 默认值为 '0',更改为 varchar(255) N' 在 4 号线
...所以我在(例如)中添加一个字符并得到此错误:show
showz
您的 SQL 语法有错误; near 'to varchar(255) 不为 NULL default '' , from varchar(255) 不是 NUL' 在第 5 行
...所以我在(例如)中添加一个字符并得到此错误:to
toz
您的 SQL 语法有错误; near 'from varchar(255) 不为 NULL default '' , type varchar(255) NOT NU' 在 6 号线
...所以我添加一个字符(例如)并且它有效!?from
fromz
这是怎么回事?不。
如果这个问题太明显了,如果社区认为这是谨慎的,我会删除它,但与此同时,我被难住了。
顺便说一句,我搞砸了间距、大小写和其他东西,但没有任何成功。
答:
SHOW
,并且是保留的 MySQL 关键字。您必须用反引号引用它们,以使它们用作列名:TO
FROM
$query = "CREATE TABLE IF NOT EXISTS $table_messages (
`id` int(11) unsigned NOT NULL auto_increment,
`show` tinyint(1) unsigned NOT NULL default '0' ,
`to` varchar(255) NOT NULL default '' ,
`from` varchar(255) NOT NULL default '' ,
`type` varchar(255) NOT NULL default '' ,
`message` varchar(255) NOT NULL default '' ,
PRIMARY KEY(id)
) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1";
通常,以这种方式引用每个列名称是很好的做法(尽管不需要),以防止与关键字发生意外冲突,因为关键字有数百个。有关完整列表,请参阅 http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html。
评论
只是在黑暗中捅了一刀,但是在mysql中是来回保留字吗?你能不能把这些词用[to]和[from]来包装,或者像你一样,把这些词改成toperson或fromperson?
您可能对 MySQL 语句中的保留字列表感兴趣。简而言之,如果要将其中任何一个用作列名(或在以下查询中的任何位置),则必须引用它们,通常用反引号括起来:
`show` TINYINT(1) UNSIGNED NOT NULL,
...以及以后:
SELECT `show` FROM `varchar` WHERE `to`="France"
这不是您问题的答案,而是“PHP-MySQL CREATE TABLE 查询有什么问题?(对于另一位 Google 员工)
也许不是所有版本的 PHP 都是这样的,但在我的环境中,当我尝试制作表格时,像“mysql_query”这样的非 PDO 命令会抛出错误:
CREATE TABLE IF NOT EXISTS `actionlog`
错误:
You have an error in your SQL syntax
与 PDO 适配器配合使用即可。
评论