Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: CREATE TABLE <???>
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » CREATE TABLE <???>

Страниц (1): [1]
 

1. Avalon - 15 Декабря, 2008 - 12:27:53 - перейти к сообщению
Можно ли создать таблицу с динамическим именем, например $name. Мне нужно чтобы при регистрации нового юзера создавалась таблица, название которой равно логину юзера.
Что-то вроде:

mysql_query("CREATE TABLE '$qdata[0]' ()"); или

mysql_query("CREATE TABLE '$_SESSION['user_table']' ()");

Но это не срабатывает. Подскажите как сделать правильно.
2. EuGen - 15 Декабря, 2008 - 12:50:39 - перейти к сообщению
У Вас отсутствует определение полей таблицы. Нельзя создать таблицу, не имеющую ни одного атрибута.
Не очень понятно, правда, зачем Вам создавать на пользователя по таблице. А если у Вас будет 100000 пользователей.. это 100000 таблиц? ..
3. Avalon - 15 Декабря, 2008 - 13:02:58 - перейти к сообщению
Я опустил поля, дабы не усложнять вопрос. Понятно, что там в скобках будет опредеелние полей, проблема не в них, а в переменной, которая название таблицы. Если вместо $data[0] поставить любое имя, например, abc, запрос проходит.
4. Вездеход - 15 Декабря, 2008 - 13:31:08 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. <?
  2. mysql_query("CREATE TABLE '".$qdata[0]."' ()")
  3.  
  4. mysql_query("CREATE TABLE '".$_SESSION['user_table']."' ()")
  5. ?>


вот так сделать попробуй
5. EuGen - 15 Декабря, 2008 - 13:31:30 - перейти к сообщению
Посмотрите, что именно у Вас содержится в переменной, значение которой Вы хотите использовать в качестве имени таблицы, а так же что именно возвращает Вам MySQL - mysql_error
6. Avalon - 15 Декабря, 2008 - 14:00:42 - перейти к сообщению
Вездеход не срабатывает.

EuGen в переменной хранится логин пользователя, это точно, он и должен присвоиться названию таблицы. Если я правильно понял сообщение об ошибке, проблема в синтаксисе. Я не до конца знаю, как выводить ошибки.. вывел вот так: die(mysql_errno($link).mysql_error($link));
7. EuGen - 15 Декабря, 2008 - 14:39:12 - перейти к сообщению
Вообще говоря, имена объектов (таблиц, полей и т.п.) заключаются в обратные (бэктик) кавычки, но не в прямые. Прямые - только для строковых констант и литералов.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. echo("Variable is: <pre>\n");
  4. var_dump($qdata[0]);
  5. echo("\n</pre>");
  6. mysql_query("CREATE TABLE `".$qdata[0]."` ()") or die(mysql_error());
  7. ?>
  8.  
8. Ыыы - 15 Декабря, 2008 - 14:57:14 - перейти к сообщению
А зачем такая структура?? Объясните мне не понимающему Недовольство, огорчение Этоже полный гон с точки зрения производительности!
9. Вездеход - 15 Декабря, 2008 - 15:06:19 - перейти к сообщению
Avalon пишет:
Вездеход не срабатывает.

ну или так

PHP:
скопировать код в буфер обмена
  1. <?
  2. mysql_query("CREATE TABLE `".$qdata[0]."` ()")
  3.  
  4. mysql_query("CREATE TABLE `".$_SESSION['user_table']."` ()")
  5. ?>
  6.  
10. Champion - 15 Декабря, 2008 - 15:30:10 - перейти к сообщению
Ыыы пишет:
А зачем такая структура?? Объясните мне не понимающему Этоже полный гон с точки зрения производительности!
Ну или уберите вообще кавычки. В одинарных строковые значения пишутся
11. SergeantPEPPER - 15 Декабря, 2008 - 16:32:46 - перейти к сообщению
Можно так (вроде если переменная есть массив, то надо еще фиг. скобки):
CODE (text):
скопировать код в буфер обмена
  1. mysql_query("CREATE TABLE `{$qdata[0]}` ()")


Если не работает:
1) проверьте через echo $qdata[0] значение переменной
2) посмотрите echo mysql_error ()
12. Avalon - 15 Декабря, 2008 - 16:45:03 - перейти к сообщению
Вот этот вариант сработал: `".$qdata[0]."`
Спасибо большое всем.

 

Powered by ExBB FM 1.0 RC1