php PDO insert batch multiple rows with placeholders(php PDO使用占位符批量插入多行)
问题描述
我希望使用 PHP PDO 进行多次插入.
I am looking to do multiple inserts using PHP PDO.
我找到的最接近的答案是这个
The closest answer I have found is this one
how-to-insert-an-array-into-a-single-mysql-prepared-statement
但是给出的示例使用 ??而不是真正的占位符.
However the example thats been given uses ?? instead of real placeholders.
我查看了 PHP 文档站点上的占位符示例
I have looked at the examples on the PHP doc site for place holders
php.net pdo.prepared-statements
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
现在假设我想用数组实现上述目标
Now lets say I wanted to achieve the above but with an array
$valuesToInsert = array(
0 => array('name' => 'Robert', 'value' => 'some value'),
1 => array('name' -> 'Louise', 'value' => 'another value')
);
对于 PDO 和每个事务的多个插入,我将如何处理?
我想它会从一个循环开始?
I imagine it would start of with a loop?
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
foreach($valuesToInsert as $insertRow){
// now loop through each inner array to match binded values
foreach($insertRow as $column => value){
$stmt->bindParam(":{$column}", value);
}
}
$stmt->execute();
然而,上述方法不起作用,但希望能证明我试图实现的目标
However the above does not work but hopefully will demonstrate what im trying to achieve
推荐答案
首先,?
符号是真正的占位符(大多数驱动程序允许同时使用这两种语法,位置和命名占位符).其次,准备好的语句只不过是一种将原始输入注入到 SQL 语句中的工具——SQL 语句本身的语法不受影响.您已经拥有所需的所有元素:
First of all, ?
symbols are real place-holders (most drivers allow to use both syntaxes, positional and named place-holders). Secondly, prepared statements are nothing but a tool to inject raw input into SQL statements—the syntax of the SQL statement itself is unaffected. You already have all the elements you need:
- 如何使用单个查询插入多行
- 如何动态生成 SQL
- 如何使用带有命名占位符的预处理语句.
将它们全部结合起来非常简单:
It's fairly trivial to combine them all:
$sql = 'INSERT INTO table (memberID, programID) VALUES ';
$insertQuery = [];
$insertData = [];
$n = 0;
foreach ($data as $row) {
$insertQuery[] = '(:memberID' . $n . ', :programID' . $n . ')';
$insertData['memberID' . $n] = $memberid;
$insertData['programID' . $n] = $row;
$n++;
}
if (!empty($insertQuery)) {
$sql .= implode(', ', $insertQuery);
$stmt = $db->prepare($sql);
$stmt->execute($insertData);
}
这篇关于php PDO使用占位符批量插入多行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:php PDO使用占位符批量插入多行
基础教程推荐
- 使用 PDO 转义列名 2021-01-01
- 如何在 XAMPP 上启用 mysqli? 2021-01-01
- phpmyadmin 错误“#1062 - 密钥 1 的重复条目‘1’" 2022-01-01
- Doctrine 2 - 在多对多关系中记录更改 2022-01-01
- 找不到类“AppHttpControllersDB",我也无法使用新模型 2022-01-01
- 如何在 Symfony 和 Doctrine 中实现多对多和一对多? 2022-01-01
- PHP 守护进程/worker 环境 2022-01-01
- 在 CakePHP 2.0 中使用 Html Helper 时未定义的变量 2021-01-01
- 在 yii2 中迁移时出现异常“找不到驱动程序" 2022-01-01
- HTTP 与 FTP 上传 2021-01-01