2010-05-15 2 views
2

Я получил этот кодНеправильное имя таблицы, PHP/MySQL

 mysqli_query ($userdatabase, 
     'CREATE TABLE `user_'.$emailreg.'` (
     ID int NOT NULL AUTO_INCREMENT PRIMARY KEY, 

     IP varchar(10), 
     FLD1 varchar(20), 
     FLD2 varchar(40), 
     FLD3 varchar(25), 
     FLD4 varchar(25), 
     FLD5 varchar(25))'); 

     echo (mysqli_error ($userdatabase)); 

, который работает отлично на моем локальном хосте, но когда я загрузить его на сервер, он начинает давать мне «Некорректное имя таблицы«user_vasya @ rossya.pu ". Есть идеи?

Спасибо!

+1

Почему вам нужен стол за пользователя? почему бы не хранить все данные в одной таблице + по электронной почте? – zerkms

+0

, потому что будет больше (от 1 до 10 дополнительных строк информации), а затем просто электронная почта и пароль для каждого пользователя. –

+0

@user ОК, чтобы иметь дополнительные строки для каждого пользователя. Это настройка базы данных NORMAL. Почему бы вам не стать книгой и немного научиться? –

ответ

2

Как только вы говорите: «Я создаю таблицу для каждого пользователя» это антипаттерны я называю Metadata Tribbles. Проблема состоит в том, что эти таблицы, как правило, выходят из-под контроля. :-)

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

Если вы используете delimited identifiers, имена SQL таблиц может содержать специальные символы, или даже пробела, SQL зарезервированных слова, международные символы и т.д. Но если взять обратные кавычки прочь, @ и . не являются допустимыми символами для идентификатор, поскольку он смущает синтаксический анализатор SQL. Подумайте об этом: используете ли вы какие-либо другие языки программирования, которые принимают . как допустимый символ в имени переменной или имени класса?

Другие советы:

IP более легко хранить в INT UNSIGNED, и есть функции INET_ATON() и INET_NTOA(), чтобы преобразовать строку IP-адрес и из двоичного эквивалента. Это поможет вам убедиться, что вы случайно не храните неверный IP-адрес. Также вы можете использовать побитовые двоичные операторы для выполнения операций маскирования подсетей по IP-адресу в двоичной форме.

Столбы FLD1, FLD2, FLD3 и т. Д.не являются описательными и указывают, что вы недостаточно рассчитали эту таблицу. Возможно, вам понадобится split this table into a few separate tables для управления многозначными атрибутами. Но нельзя сказать, как это сделать, поскольку ваши столбцы называются так абстрактно.

1

Похоже, это неправильное имя файла для файловой системы хоста.

Но вы все равно не должны создавать таблицу для каждого пользователя. Это должна быть одна таблица для всех пользователей с полем user_id.

2

Имена таблиц не могут содержать @ или .. Кроме того, что вы пытаетесь сделать, это очень плохой дизайн базы данных. Используйте одну таблицу и добавьте в качестве ключа адрес электронной почты (или, еще лучше, идентификатор из другой таблицы в виде целого).

+0

странно, мой localhost (xampp) взял такое имя-табло без проблем, если оно было в «апострофах». –

0

Моя первая мысль была «OMG! Какое ужасное имя для стола!» :-)

Документах MySQL утверждать, что:

баз данных и таблиц имена не могут содержать «/», «\», или символы, которые не разрешены в именах файлов «».

Я подозреваю, что вы нарушаете, что по двум пунктам, то . в доменном имени и (возможно) в @ разделителя.

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

0

Имена таблиц не могут содержать @ или ..

Смежные вопросы