2012-06-12 3 views
3

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

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' на своем месте, которое получает его значение от дальнейшего кода.

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

+1

Вы пытались вывести SQL-код, который вы генерируете, поэтому можете быть уверены, что он содержит то, что, по вашему мнению, содержит? – andrewsi

+3

Никогда не используйте данные POST непосредственно в любых запросах mySQL. – Hidde

+1

Насколько мне известно, MySQL не требует котировок вокруг имени таблицы. Вы пытались удалить одиночные кавычки? –

ответ

8

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

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

$name = mysql_real_escape_string($_POST['name']); 
mysql_query("CREATE TABLE `".$name."` (name VARCHAR(30), age INT, car VARCHAR(30))"); 
+1

+1 за то, что вы не знаете об обратных тактах;) – Gerep

+0

Отлично! Работает, как прелесть, спасибо. Я приму ответ в течение 4 минут – user1449737

+0

Таблицы будут созданы администратором при добавлении новых клиентов в базу данных. Так что это не будет спам – user1449737

2

Поместите его в другую переменную, и он будет работать, есть конфликт с символом «» в переменной 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))"); 
?> 

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

+0

Готовые заявления работают с идентификаторами? Я думал, что они работают только для привязки значений –

+0

Вы правы, они этого не делают! Если вы посмотрите на http://php.net/manual/en/mysqli.prepare.php, он скажет вам: P Я отредактирую это. Это была ошибка, извините !!! –

1
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 
} 
1

Вы действительно должны использовать PDO или MySQLi вместо mysql_ * функции. Функции mysql_ * находятся в процессе устаревания, и они полны дыр в безопасности.

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

+0

Как вы привязываете переменную к идентификатору с помощью PDO или mysqli? –

+0

Ваш запрос будет выглядеть CREATE TABLE: имя (имя VARCHAR (30), возраст INT, автомобиль VARCHAR (30) , а затем $ stmt-> bindParam (": имя", [ 'имя' $ _POST ]); Для полного примера вы захотите найти хороший учебник PDO, который даст вам все основы. –

+0

Вы действительно уверены? Документы говорят иначе. Кроме того, прочтите следующее: http://stackoverflow.com/ Вопросы/182287/can-php-pdo-statements-accept-the-table-name-as-parameter –

0

Используя новейший разъем Mysqli, вы можете сделать что-то вроде этого: 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))");

0

$ query = "CREATE TABLE $ name". '(id INT (6) UNSIGNED AUTO_INCREMENT ПЕРВИЧНЫЙ КЛЮЧ, возраст INT, имя varchar (30), автомобиль VARCHAR (30))';

+1

Я хотел знать, как использовать переменную в качестве имени столбца. – Anusha

+0

можно ли написать запрос создания в цикле foreach и как использовать.please guide me – Anusha

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