2012-05-11 3 views
-1

Я изо всех сил пытаюсь создать таблицы SQL, используя адреса электронной почты в качестве имени таблицы.Создание таблицы SQL с адресом электронной почты в качестве заголовка

код я использую выдает следующее сообщение об ошибке:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@gmail.com(id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), name VARCHAR' at line 1

и соответствующий код:

// 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, что не адрес электронной почты, то есть не имеет символа @, но он показывает, что ошибка, если он содержит символ @.

+1

Что вы определили как допустимые символы для использования в именах таблиц? – Madbreaks

ответ

8

Вы можете обойти это, избегая имени таблицы с обратными окнами (`). Но действительно для большинства обстоятельств это плохой способ разработки вашей базы данных.

Вы должны использовать одну таблицу с полем emailaddress вместо создания новой таблицы для каждого пользователя/адреса электронной почты, если у вас нет конкретной необходимости.

+0

RyanP спасибо. Можете ли вы помочь мне подумать, если это ДЕЙСТВИТЕЛЬНО плохой способ сделать что-то для моего сайта: есть одна основная таблица для пользователей, которые регистрируют адрес электронной почты и пароли. Каждое имя пользователя совпадает с адресом электронной почты.Затем каждый пользователь получает таблицу, созданную в их имени, для отслеживания их загрузки файлов и около 15 других релевантных переменных, которые относятся к пользователю. Я думаю, что это была хорошая настройка, потому что у каждой учетной записи пользователя будет много активности (новые строки заполняются 15 переменными или около того). Есть ли лучший настрой? Я новичок во всем этом. – ideasandstuff

0

Проблема в том, что вы не используете обратные сигналы. Использование кавычку позволяет выбирать идентификаторы более свободно:

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

См here для получения дополнительной информации по этому вопросу.

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`; 
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()); 

Вам нужны обратные тики «` »вокруг переменной.