PDO 在循环数组中绑定参数

PDO bind params in looping array

目前我正在构建与此类似的 PDO 插入:

foreach($r->occurrences as $row) {
   $arr[] = array(
        'id' => $id,
        'name' => $name,
        'start' => $row->getTimestamp(),
        'end' => $row->getTimestamp() + $duration,
        'note' => $notes
    );
};

$keys = implode(',', array_keys($arr[0]));

// Format into ('1','2','4'),('8','3','4') for insertion
foreach ($repBkgArr as &$array) {
   $array = "('".implode("','", $array)."')";
}

$values = implode(',', $arr);

$query = "INSERT INTO table ($keys) VALUES $values";

$db->execute($query);

在这种情况下,显然我不能只在执行函数的第二个参数中绑定变量,因为我要批量插入几组数据。

$db->execute($query, array(':id' => $id, ':name' => $name);

我该如何处理?我一直在研究一整天,但我似乎无法找到任何适合我情况的东西。

最简单的方法:只需为每个绑定值添加索引前缀,如下所示:

$sql     = 'INSERT INTO `tabke`(id, name) VALUES ';
$bind    = array();
$sqlRows = array();
foreach ($r->occurrences as $index => $row) {
    $sqlRows[] = "(:id_$index, :name_$index)";
    $bind[':id_'.$index]   = $row['id'];
    $bind[':name_'.$index] = $row['name'];
}

print_r($sql.implode(',', $sqlRows));   // QUERY SQL
print_r($bind);                         // QUERY PARAMS