gpt4 book ai didi

php - 在 PHP PDO MYSQL 中插入多行的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-29 19:49:12 26 4
gpt4 key购买 nike

假设我们要在表中插入多行:

$rows = [(1,2,3), (4,5,6), (7,8,9) ... ] //[ array of values ];

使用 PDO:

$sql = "insert into `table_name` (col1, col2, col3) values (?, ?, ?)" ;

现在,您应该如何继续插入行?像这样吗?

$stmt = $db->prepare($sql);

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

或者,像这样?

$sql = "insert into `table_name` (col1, col2, col3) values ";
$sql .= //not sure the best way to concatenate all the values, use implode?
$db->prepare($sql)->execute();

哪种方式会更快、更安全?插入多行的最佳方法是什么?

最佳答案

您至少有以下两个选择:

$rows = [(1,2,3), (4,5,6), (7,8,9) ... ];

$sql = "insert into `table_name` (col1, col2, col3) values (?,?,?)";

$stmt = $db->prepare($sql);

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

OR:

$rows = [(1,2,3), (4,5,6), (7,8,9) ... ];

$sql = "insert into `table_name` (col1, col2, col3) values ";

$paramArray = array();

$sqlArray = array();

foreach($rows as $row)
{
$sqlArray[] = '(' . implode(',', array_fill(0, count($row), '?')) . ')';

foreach($row as $element)
{
$paramArray[] = $element;
}
}

// $sqlArray will look like: ["(?,?,?)", "(?,?,?)", ... ]

// Your $paramArray will basically be a flattened version of $rows.

$sql .= implode(',', $sqlArray);

$stmt = $db->prepare($sql);

$stmt->execute($paramArray);

正如您所看到的,第一个版本的代码要简单得多;但是第二个版本确实执行批量插入。批量插入应该更快,但我同意@BillKarwin 的观点,即在绝大多数实现中不会注意到性能差异。

关于php - 在 PHP PDO MYSQL 中插入多行的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40865541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com