我想在我的Insert查询中使用变量(例如$ table)而不是'categories',这是我的表的名称。我已经读过一些关于“准备”的内容,但是根本不知道如何使用我的代码。有人可以帮我解决这个问题吗?
$sql = 'INSERT INTO categories (name, description) VALUES ("' . $_POST['name'] . '", "' . $_POST['description'] . '")';
如果重要,表名将作为函数的一个参数:)
答案 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