构建动态INSERT查询

时间:2014-01-20 20:40:18

标签: php mysql sql

我想在我的Insert查询中使用变量(例如$ table)而不是'categories',这是我的表的名称。我已经读过一些关于“准备”的内容,但是根本不知道如何使用我的代码。有人可以帮我解决这个问题吗?

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

如果重要,表名将作为函数的一个参数:)

3 个答案:

答案 0 :(得分:2)

你可以再次使用一个变量:

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

答案 1 :(得分: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语句中使用。

答案 2 :(得分:0)

我认为你不能用prepare语句做动态表名;因为prepare语句需要事先知道要查询的表: 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();

假设表具有相同的列,并且表已设置为变量$ table。

PDO提供了更多优势.. http://www.php.net/manual/en/class.pdo.php