Создать таблицу MySQL с переменной PHP

Я пытаюсь создать таблицу, имя которой является значением того, что хранится в переменной$name, Я перепробовал множество разных методов, но ни один из них мне не подходит. Вот код, который я использую в настоящее время:

 mysql_connect("localhost", "peltdyou_admin", "123456") or die(mysql_error()); 
 mysql_select_db("peltdyou_orders") or die(mysql_error()); 
 mysql_query("CREATE TABLE '" .$_POST['name']. "' ( name VARCHAR(30), age INT, car VARCHAR(30))");

Я знаю, что это как-то связано с'" .$_POST['name']. "' но я не могу понять, что. я пытался'$name' на его место, которое получает его значение далее в коде.

Любая помощь будет отличной!

 Jeff Lambert12 июн. 2012 г., 21:48
Насколько мне известно, MySQL не требует кавычек вокруг имени таблицы. Вы пытались удалить одинарные кавычки?
 scriptin12 июн. 2012 г., 21:49
Проверьте привилегии для вашего пользователя SQL
 andrewsi12 июн. 2012 г., 21:48
Вы пытались вывести генерируемый вами SQL, чтобы быть уверенным, что он содержит то, что, по вашему мнению, он содержит?
 Hidde12 июн. 2012 г., 21:48
Никогда не используйте данные POST напрямую в любых запросах mySQL.
 Brad12 июн. 2012 г., 21:49
@Hidde, или GET, или COOKIE, или любые данные, которым нельзя доверять.

Ответы на вопрос(7)

 mysql_connect("localhost", "peltdyou_admin", "123456") or die(mysql_error()); 
 mysql_select_db("peltdyou_orders") or die(mysql_error()); 

 //prevent injection:
 $name = mysql_real_escape_string($name);

 $query = <<<SQL
CREATE TABLE `{$name}` (name VARCHAR(30), age INT, car VARCHAR(30));
SQL; 

if ( mysql_query($query) ) {
 //success
} else {
 //error
}

ql_ *. Функции mysql_ * находятся в процессе устаревания и полны дыр в безопасности.

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

 12 июн. 2012 г., 22:39
Вы действительно уверены? Документы говорят иначе. Также прочитайте это:stackoverflow.com/questions/182287/…
 12 июн. 2012 г., 22:00
Как вы связываете переменную с идентификатором, используя PDO или mysqli?
 12 июн. 2012 г., 22:29
Ваш запрос будет выглядеть как CREAT, E TABLE: name (имя VARCHAR (30), age INT, car VARCHAR (30), а затем $ stmt-> gindParam (& quot; name & quot ;, $ _POST [& apos; name & apos;]) Для полного примера вы захотите найти хороший учебник по PDO, который даст вам все основы.
 12 июн. 2012 г., 23:08
Вы правы, я неправильно понял ваш ответ :). Я сделал небольшое изменение, чтобы я мог отменить свое пониженное голосование, еще раз извините!
 12 июн. 2012 г., 23:05
О, да, вы правы, идентификаторы не могут быть сделаны с bindParam. Однако я не уверен, почему вы проголосовали за мой ответ, поскольку в нем не упоминаются обязательные параметры ...

и он будет работать, конфликт с "" символ в переменной POST и в mysql_query.

<?php
mysql_connect("localhost", "peltdyou_admin", "123456") or die(mysql_error()); 
mysql_select_db("peltdyou_orders") or die(mysql_error()); 
$name = mysql_real_escape_string($_POST['name']);
mysql_query("CREATE TABLE '$name' ( name VARCHAR(30), age INT, car VARCHAR(30))");
?>

Я разместил этот код, чтобы помочь вам в вашем коде, но выshould not используйте функции mysql_ *, вы должны использовать функции mysqli_ *. Вы можете прочитать больше о них здесь: http://php.net/manual/en/book.mysqli.php

 12 июн. 2012 г., 22:02
Вы правы, они не так! Если вы посмотрите наphp.net/manual/en/mysqli.prepare.php это говорит вам: P, я отредактирую это. Это была ошибка, извините !!!
 12 июн. 2012 г., 21:56
Готовые операторы работают с идентификаторами? Я думал, что они работают только для обязательных ценностей

вы можете сделать что-то вроде этого: 1. Создайте переменную из пользовательского ввода примерно так$variable=$_POST['name'] 2. Используйте переменную в своем запросе, как показано в полном коде ниже здесь

$variable=$_POST['name']; mysqli_connect("localhost", "peltdyou_admin", "123456") or die(mysql_error()); mysqli_select_db("peltdyou_orders") or die(mysqli_connect_error()); mysqli_query("CREATE TABLE $variable ( name VARCHAR(30), age INT, car VARCHAR(30))");

CREATE TABLE IF NOT EXISTS `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  `description` text NOT NULL,
  `price` double NOT NULL,
  `created` datetime NOT NULL,
  `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
Решение Вопроса

а не кавычки. И избежать входа! Кроме того, хотя это работает на локальном хосте, убедитесь, что пользователь, работающий на вашем производственном сервере, имеетprivilege СОЗДАТЬ таблицы (обычно это не AFAIK, конечно, на общих хостингах).

A word of warning: Вы действительно уверены, что хотите создать таблицу для пользовательского ввода? сколько таблиц вы собираетесь создать таким образом? Вы не можете просто переделать всю конструкцию, чтобы вставитьvalues вместо?

$name = mysql_real_escape_string($_POST['name']);
mysql_query("CREATE TABLE `".$name."` ( name VARCHAR(30), age INT, car VARCHAR(30))");
 user144973712 июн. 2012 г., 21:56
Отлично! Работает как шарм, спасибо. Я приму ответ через 4 минуты
 user144973712 июн. 2012 г., 22:03
Таблицы будут создаваться администратором при добавлении новых клиентов в базу данных. Таким образом, это не будет спамом
 12 июн. 2012 г., 21:55
+1 за незнание о бэктиках;)
 12 июн. 2012 г., 22:08
Я предлагаю добавить клиента в "клиент" таблица, как новая строка, а не создание новой таблицы ...
$query = "CREATE TABLE $name" . '(
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    age INT,
    name  varchar(30),
    car VARCHAR(30)
)';
 01 дек. 2016 г., 11:06
мы можем написать запрос на создание в цикле foreach и как его использовать?
 01 дек. 2016 г., 11:05
Я хотел знать, как использовать переменную в качестве имени столбца.

Ваш ответ на вопрос