首页  >  文章  >  数据库  >  PDO中可以使用一条Prepared语句插入多行吗?

PDO中可以使用一条Prepared语句插入多行吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-06 21:18:02369浏览

Can I Use a Single Prepared Statement to Insert Multiple Rows in PDO?

在 PDO 中使用准备好的语句插入多行

高效地将数据插入数据库至关重要,尤其是在处理大型数据集时。这个问题探讨了在 PHP 的 PDO 扩展中使用单个准备好的语句插入多行的可能性,以优化插入过程。

问题:

需要出现使用数组中的动态数据将多行插入到表中。演示了使用 PDO 插入单行的典型方法:

$params = [
    ':val1' => 'val1',
    ':val2' => 'val2',
    ':val3' => 'val3',
];

$sql = "INSERT INTO table VALUES (col1, col2, col3) VALUES (:val1, :val2, :val3)";
$stmt = DB::getInstance()->prepare($sql);
$stmt->execute($params);

答案:

要使用单个准备好的语句插入多行,可以构造包含多个值的单个 INSERT 查询。参数单独传递以确保安全性和灵活性。

示例:

给定要插入的行数组:

$rows = [
    ['abc', 'def', 'ghi'],
    ['abc', 'def', 'ghi'],
    ['abc', 'def', 'ghi'],
];

以下代码创建一个准备好的查询,其中每行都有占位符:

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

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

$params = array();
foreach ($rows as $row) {
    foreach ($row as $value) {
        $params[] = $value;
    }
}

$query = "INSERT INTO Table (col1, col2, col3) VALUES " . $args;
$stmt = DB::getInstance()->prepare($query);
$stmt->execute($params);

每行的值作为参数单独传递,保持安全性并允许高效插入多行。

以上是PDO中可以使用一条Prepared语句插入多行吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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