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

Mary-Kate Olsen
发布: 2024-11-06 21:18:02
原创
368 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!