MySQL创建新的表语法错误

时间:2014-09-16 16:33:09

标签: php mysql syntax-error

我试图使用以下PHP / mysql代码片段创建一个新表:

                    $query = "
                        CREATE TABLE IF NOT EXISTS :user (
                            id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
                            username CHAR(24),
                            summonername VARCHAR(16),
                            password VARCHAR(16),
                            region CHAR(3),
                            lvl INT(2) DEFAULT '0',
                            maxlvl INT(2),
                            status VARCHAR(20),
                            enabled INT(1) DEFAULT '1',
                            priority INT(1) DEFAULT '0',
                            note VARCHAR(150)
                        )
                    ";

                    $query_params = array (
                        ':user' => $user,
                    );

如果我执行这个,我会收到一些语法错误:

  

失败:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在''testuser'附近使用正确的语法(id INT(11)NOT NULL AUTO_INCREMENT PRIMARY KEY,在第1行使用'

这很奇怪,因为我根据官方文档(http://dev.mysql.com/doc/refman/5.1/de/create-table.html)以及一些用户自制的示例检查了语法。 另外,有没有办法将表的默认编码设置为utf8(不是每一行,而是全局)?

如果有人能告诉我如何解决那里的语法错误,我会很高兴,

3 个答案:

答案 0 :(得分:1)

您无法使用元数据参数。您也不应该为每个用户创建表。添加一个字段来保存用户,或者自己清理表名。

答案 1 :(得分:0)

参考我上面的评论,并举例说明......

 CREATE TABLE my_table(i INT(4) ZEROFILL NOT NULL PRIMARY KEY);

 INSERT INTO my_table VALUES (1),(9),(10),(99),(100),(999),(1000),(9999),(10000);

 SELECT * FROM my_table;
 +-------+
 | i     |
 +-------+
 |  0001 |
 |  0009 |
 |  0010 |
 |  0099 |
 |  0100 |
 |  0999 |
 |  1000 |
 |  9999 |
 | 10000 |
 +-------+

答案 2 :(得分:0)

请在create table

中尝试此查询
CREATE TABLE IF NOT EXISTS `user` (
                        id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
                        username CHAR(24),
                        summonername VARCHAR(16),
                        password VARCHAR(16),
                        region CHAR(3),
                        lvl INT(2) DEFAULT '0',
                        maxlvl INT(2),
                        status VARCHAR(20),
                        enabled INT(1) DEFAULT '1',
                        priority INT(1) DEFAULT '0',
                        )