以下主题与我想要提出的内容很接近,但考虑到现在在php中不推荐使用mysql函数并且有预防语句注入的预备语句,它已经过时了。 insert all $_POST data into mysql using PHP?
基本上,我的数据库中有大量列,当我提交此表单时,所有列都需要填写。表单使用相同名称的输入字段匹配每个列(输入字段上的name属性与其所属的列名称相同。因此$_POST['firstName']
位于firstName
列中,因此上)。
有没有办法使用mysqli或PDO我可以轻松地获取所有的POST数据并自动将其插入MySQL表而无需手动遍历每个字段?我可以使用准备好的语句对它们进行全部编码,但是有很多列,如果可能的话,我希望一次完成它们。
这是我不想完成的长版本的开始。
$stmt = $connection->prepare("INSERT INTO area_retreat
(user,firstName,lastName,...etc)
VALUES
(?,?,?,...etc)
ON DUPLICATE KEY UPDATE
user=VALUES(user),
firstName=VALUES(firstName),
lastName=VALUES(lastName),
...etc
");
$stmt->bind_param("sss",
$username,
$_POST['firstName'],
$_POST['lastName']
);
$stmt->execute();
答案 0 :(得分:1)
INSERT INTO area_retreat VALUES (?, ?, ...)
- 但是,您必须匹配数据库中显示的所有列。
如果您有自动增量ID,则需要按正确的列顺序为该列提供NULL。
答案 1 :(得分:0)
为避免错误,您肯定需要以某种方式存储变量列表。它可以像数组一样简单:
$fields = array('firstName', etc.);
然后,您可以循环遍历数组以动态生成sql语句,并使用命名占位符而不是问号,您只需将它们绑定一次。您还可以将值存储在数组中,并将该数组作为参数发送到execute()
:
// start of query
$values = array();
$query = '...';
foreach ($fields as $field)
{
if (isset($_POST[$field]))
{
// add to query
$query .= "...";
// add value to array so that you can feed the array to `execute`
$values[':' . $field] = $_POST[$field];
}
}
// add end of query
$query .= '...';
$stmt->execute($values);
如果要在ON DUPLICATE KEY UPDATE
部分中使用相同的变量,可以执行另一个循环或构建一个插入部分,在循环一次后可以使用两次。