【发布时间】:2013-02-10 18:33:34
【问题描述】:
我希望使用 PHP PDO 进行多次插入。
我找到的最接近的答案是这个
how-to-insert-an-array-into-a-single-mysql-prepared-statement
但是给出的示例使用 ??而不是真正的占位符。
我已经查看了 PHP 文档站点上的占位符示例
php.net pdo.prepared-statements
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
现在假设我想通过数组实现上述目标
$valuesToInsert = array(
0 => array('name' => 'Robert', 'value' => 'some value'),
1 => array('name' -> 'Louise', 'value' => 'another value')
);
我将如何处理 PDO 和每个事务的多个插入?
我想它会从一个循环开始?
$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();
但是上述方法不起作用,但希望能证明我试图实现的目标
【问题讨论】:
-
你需要在循环内执行。否则你只是覆盖了绑定参数并最终只绑定了 LAST 值。
-
但是,如果我执行,那么它会一次执行一行数据库事务吗?我正在尝试批量进行
-
是的,但是如果您尝试模拟 mysql 扩展
insert ... values (...), (...), (...)插入语法,这不是您的做法。您必须预先构建一个查询语句,该语句为您插入的每组值都有一个占位符,准备它,绑定参数,然后执行。你最终所做的工作与多次运行一个准备好的插入一样多。 -
我一次插入大约 40 或 50k 行。我需要分批做。它是占用时间的数据库事务。
-
JFYI:
??是 真实 占位符,:name是假占位符。
标签: php insert pdo bulkinsert