2014-01-20 115 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

我不认为你可以用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(); 

这是假设表中有相同的列,表已被设置为变量$表。

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