<?php
function pdo_named_in_clause_from_array($array, $name = 'in') {
$in = $data = array();
$i = 0;
$name = preg_replace('/[^a-z0-9_]+/', '', (string)$name);
if (!preg_match('/^[a-z]/i', $name)) {
throw new \InvalidArgumentException('Placeholder name ' . $name . ': must begin with a letter');
}
foreach ($array as $value) {
$key = $name . $i;
$in[] = ':' . $key;
$data[$key] = $value;
}
return array(implode(', ', $in), $data);
}
$inList = [1, 2, 3];
list($inClause, $inData) = pdo_named_in_clause_from_array($inList);
$query = "UPDATE table SET value1 = :val1, value2 = :val2, WHERE id IN ($inClause)";
$data = array('val1' => 'Hello', 'val2' => 'World') + $inData;
var_dump($query, $data);
/*
$stmt = $db->prepare($query);
$stmt->execute($data);
*/
preferences:
37.32 ms | 402 KiB | 5 Q