Я пытаюсь создать таблицу, имя которой является значением того, что хранится внутри переменной $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'
на своем месте, что получает его значение от дальнейшего кода.
Любая помощь будет замечательной!
Используйте обратные ссылки вокруг имени таблицы, а не кавычки. И избегайте ввода! Кроме того, хотя это работает на localhost, убедитесь, что пользователь, работающий на вашем производственном сервере, имеет привилегию для CREATE таблиц (обычно это не AFAIK, на общих хостах, конечно).
Предупреждение: вы действительно уверены, что хотите создать таблицу на входе пользователя? сколько таблиц вы собираетесь создать таким образом? Разве вы не можете просто перепроектировать все, чтобы вместо этого вставлять значения ?
$name = mysql_real_escape_string($_POST['name']); mysql_query("CREATE TABLE `".$name."` ( name VARCHAR(30), age INT, car VARCHAR(30))");
Поместите его в другую переменную, и он будет работать, есть конфликт с символом «» в переменной 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
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 }
Вы действительно должны использовать PDO или MySQLi вместо функций mysql_ *. Функции mysql_ * находятся в процессе устаревания, и они полны дыр в безопасности.
С учетом сказанного вам не нужно указывать имя своей таблицы, а вместо этого следует использовать ничего или обратные ссылки.
Используя новейший соединитель 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))");
$ query = "CREATE TABLE $ name". '(id INT (6) UNSIGNED AUTO_INCREMENT ПЕРВИЧНЫЙ КЛЮЧ, возраст INT, имя varchar (30), автомобиль VARCHAR (30))';