首页  >  文章  >  数据库  >  如何使用 PDO 准备语句有效地将多行插入数据库?

如何使用 PDO 准备语句有效地将多行插入数据库?

Susan Sarandon
Susan Sarandon原创
2024-11-09 09:27:02556浏览

How can I efficiently insert multiple rows into a database using PDO prepared statements?

使用 PDO 准备好的语句高效插入多行

PDO 允许插入多行,而不是使用单独的参数执行多个插入语句使用单个查询。这种方法通过避免多次准备和执行语句的需要来增强性能和安全性。

例如,将数组 $values 中的值插入到表 table 中:

$params = [];
foreach ($values as $value) {
    array_push($params, $value['val1'], $value['val2'], $value['val3']);
}

$row_length = count($values[0]);
$nb_rows = count($values);
$length = $nb_rows * $row_length;

$args = implode(',', array_map(function($el) { return '('.implode(',', $el).')'; }, array_chunk(array_fill(0, $length, '?'), $row_length)));

$query = "INSERT INTO table VALUES " . $args;
$stmt = DB::getInstance()->prepare($query);
$stmt->execute($params);

在此解决方案中, ?占位符是根据行数和列数动态生成的。然后将参数附加到数组并作为单个数组传递给执行方法。这保证了每个参数都是单独处理的,从而确保数据安全。

或者,如果有太多行无法使用单个查询有效插入,请考虑单独执行它们:

$args = array_fill(0, count($values[0]), '?');
$query = "INSERT INTO table VALUES (".implode(',', $args).")";
$stmt = $pdo->prepare($query);

foreach ($values as $row) {
    $stmt->execute($row);
}

这该方法在容纳大型数据集的同时保持了使用准备好的语句的安全优势。

以上是如何使用 PDO 准备语句有效地将多行插入数据库?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn