3

以下主题与我要问的内容很接近,但考虑到 mysql 函数现在在 php 中已被弃用,并且有准备好的语句用于防止 sql 注入,它已经过时了。使用 PHP 将所有 $_POST 数据插入 mysql?

基本上,我的数据库中有大量列,当我提交此表单时,它们都需要填写。该表单将每一列与同名的输入字段匹配(输入字段上的 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();
4

2 回答 2

1

INSERT INTO area_retreat VALUES (?, ?, ...)-- 但是,您必须匹配数据库中显示的所有列。

如果您有一个自动增量 ID,则需要以正确的列顺序为该列提供 NULL。

于 2013-07-01T18:53:33.330 回答
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节中使用相同的变量,你可以做另一个循环或构建一个插入节,你可以在循环一次后使用两次。

于 2013-07-01T18:55:08.310 回答