2014-01-20 2 views
-2

Я хочу использовать переменную в моем запросе на вставку (например, $ table) вместо «categories» witch - это имя моей таблицы. Я кое-что прочитал о «подготовке», но не понимаю, как это сделать с моим кодом. Может кто-то помочь мне с этой проблемой?Построение динамического запроса INSERT

$sql = 'INSERT INTO categories (name, description) VALUES ("' . $_POST['name'] . '", "' .  $_POST['description'] . '")'; 

Имя таблицы будет приходить в качестве одного из параметров функции, если это имеет значение :)

ответ

2

вы можете использовать переменную снова:

$table_name = 'categories';//or other table 
$sql = 'INSERT INTO '.$table_name .' (name, description) VALUES ("' . $_POST['name'] . '", "' .  $_POST['description'] . '")'; 
+0

Я думаю, что это будет работать, только если все таблицы имеют одинаковые столбцы (имя). – prograshid

+0

да, но OP спросите имя таблицы динамическое @SeaSharp –

0

Я хотел бы предложить вам сделать что-то вроде этого:

$name = mysql_real_escape_string($_POST["name"]); 
$description = mysql_real_escape_string($_POST["description"]); 

$query = "INSERT INTO {$table_name} ("; 
$query .= "name, description"; 
$query .= ") VALUES ("; 
$query .= " '{$menu}', '{$description}' "; 
$query .= ")"; 
$result = mysql_query($query); 

Использовать mysql_real_escape_string() только ради безопасности, он просто ускользает от специальных символов в строка для использования в инструкции SQL.

0

Я не думаю, что вы можете делать динамические имена таблиц с инструкцией подготовки; как подготовить заявление должно знать таблицу запрашивается, заранее: http://www.php.net/manual/en/pdo.prepare.php

Однако я настоятельно рекомендую подход PDO для взаимодействия баз данных, как это помогает предотвратить инъекции SQL .. Получение значения непосредственно из $ _POST не.

Итак, я предлагаю:

$db = new PDO('mysql:host='.$host.';dbname='.$dbname, $username, $password); 
$db->prepare('INSERT INTO '.$table.' (name, description) VALUES (:name, :description);'); 
$db->bindParam(':name', $_POST['name']); 
$db->bindParam(':description', $_POST['description']); 
$db->execute(); 

Это предполагает, что таблица имеет одинаковые столбцы, и таблица была установлена ​​в переменной $ таблицы.

PDO предлагает гораздо больше преимуществ .. http://www.php.net/manual/en/class.pdo.php

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