-1

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

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

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '@gmail.com(id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), name 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当我从不是电子邮件地址的变量(即没有符号)中输入一个值时,它工作得很好@,但如果它包含一个@符号,它会显示该错误。

4

5 回答 5

8

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

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

于 2012-05-11T21:38:34.587 回答
0

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

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

有关这方面的更多信息,请参见此处

于 2012-05-11T21:39:00.267 回答
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

于 2012-05-11T21:41:04.420 回答
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`;
于 2012-05-11T21:48:48.547 回答
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()); 

您需要在变量周围加上反引号“`”。

于 2012-05-11T22:52:22.220 回答