gpt4 book ai didi

php - PDO 准备在单个查询中插入多行

转载 作者:行者123 更新时间:2023-11-29 17:55:19 24 4
gpt4 key购买 nike

我目前正在 MySQL 上使用这种类型的 SQL 在一个查询中插入多行值:

INSERT INTO `tbl` (`key1`,`key2`) VALUES ('r1v1','r1v2'),('r2v1','r2v2'),...

在 PDO 的阅读中,使用准备好的语句应该比静态查询具有更好的安全性。

因此,我想知道是否可以使用准备好的语句生成“通过使用一个查询插入多行值”。

如果可以,我可以知道如何实现吗?

最佳答案

使用 PDO 准备好的语句插入多个值

在一个执行语句中插入多个值。为什么因为根据this page它比常规插入更快。

$datafields = array('fielda', 'fieldb', ... );

$data[] = array('fielda' => 'value', 'fieldb' => 'value' ....);
$data[] = array('fielda' => 'value', 'fieldb' => 'value' ....);

更多数据值,或者您可能有一个填充数据的循环。

使用准备好的插入,您需要知道要插入的字段,以及创建 ? 的字段数量。占位符来绑定(bind)您的参数。

insert into table (fielda, fieldb, ... ) values (?,?...), (?,?...)....

这基本上就是我们希望插入语句的样子。

现在,代码:

function placeholders($text, $count=0, $separator=","){
$result = array();
if($count > 0){
for($x=0; $x<$count; $x++){
$result[] = $text;
}
}

return implode($separator, $result);
}

$pdo->beginTransaction(); // also helps speed up your inserts.
$insert_values = array();
foreach($data as $d){
$question_marks[] = '(' . placeholders('?', sizeof($d)) . ')';
$insert_values = array_merge($insert_values, array_values($d));
}

$sql = "INSERT INTO table (" . implode(",", $datafields ) . ") VALUES " .
implode(',', $question_marks);

$stmt = $pdo->prepare ($sql);
$stmt->execute($insert_values);
$pdo->commit();

尽管在我的测试中,使用多个插入和具有单个值的常规准备插入时仅存在 1 秒差异。

关于php - PDO 准备在单个查询中插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48904900/

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