创建一个电子邮件地址为标题的SQL表

时间:2012-05-11 21:34:29

标签: php mysql sql forms

我正在努力使用电子邮件地址作为表名来创建SQL表。

我使用的代码会产生以下错误:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   '@ gmail.com附近(id INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(id),   在第1行命名VARCHAR'

,相关代码是:

// create new table for users tosses
    // Make a MySQL Connection
        mysql_connect("localhost", "$sqlusername", "$sqlpassword") or die(mysql_error());
        mysql_select_db("$db_name") or die(mysql_error());

// Create a MySQL table in the selected database
        mysql_query("CREATE TABLE $emailaddress(
        id INT NOT NULL AUTO_INCREMENT, 
        PRIMARY KEY(id),
        name VARCHAR(30), 
        age INT)")
        or die(mysql_error());  

当我从变量$emailaddress输入一个不是电子邮件地址的值,即没有@符号时,它工作正常,但如果它包含@则显示错误}符号。

5 个答案:

答案 0 :(得分:8)

你应该能够通过使用反引号(`)转义表名来解决这个问题。但实际上,对于大多数情况来说,这是设计数据库的一种糟糕方式。

除非您有特殊需要,否则您应该使用一个带有emailaddress字段的表,而不是为每个用户/电子邮件地址创建一个新表。

答案 1 :(得分:0)

这里的问题是你没有使用反引号。使用反引号可以让您更自由地选择标识符:

CREATE TABLE `$emailaddress` ( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), name VARCHAR(30), age INT)

有关详细信息,请参阅here

答案 2 :(得分:0)

http://dev.mysql.com/doc/refman/5.5/en/identifiers.html

Permitted characters in quoted identifiers include the full Unicode Basic Multilingual Plane (BMP), except U+0000:

ASCII: U+0001 .. U+007F

答案 3 :(得分:0)

将一个表设计如下

可能对您有利
CREATE TABLE emailaddr
(
    id INT NOT NULL AUTO_INCREMENT,
    email varchar(50),
    PRIMARY KEY(id),
    name VARCHAR(30),
    age INT,
    unique key (email)
);

我建议这样做的原因是如果您必须向表中添加更多字段,您只需要更改一个表。使用您正在使用的设计,您将不得不查询可能尚不存在的表(mysql将为您提前做的事情)。如果你添加字段,你必须循环数百甚至数千个表来进行必要的更改。

您可以查询如下的电子邮件地址:

SELECT * FROM db_name.emailaddr where email = '$emailaddress';

根据您的设计,您必须先检查表格是否存在

SELECT COUNT(1) FROM information_schema.tables
WHERE table_schema = 'db_name' AND table_name = '$emailaddress';

然后,如果表计数为1,那么你可以

SELECT * FROM db_name.`$emailaddress`;

答案 4 :(得分:0)

将您的代码更改为:

// create new table for users tosses
    // Make a MySQL Connection
        mysql_connect("localhost", "$sqlusername", "$sqlpassword") or die(mysql_error());
        mysql_select_db("$db_name") or die(mysql_error());

// Create a MySQL table in the selected database
        mysql_query("CREATE TABLE `$emailaddress`(
        id INT NOT NULL AUTO_INCREMENT, 
        PRIMARY KEY(id),
        name VARCHAR(30), 
        age INT)")
        or die(mysql_error()); 

你需要在变量附近留下“嘀嗒”。