Если у вас есть список переменных, которые различаются по размеру при каждом вызове, который вы хотите связать с IN
-статистом, самый простой способ - генерировать строку SQL программно и использовать цикл для привязки переменных:
/**
* @param array $values
* @param mysqli $db
* @return mysqli_stmt
*/
function bindInValues(array $values, mysqli $db)
{
$sql = sprintf('SELECT blabla FROM foo WHERE id IN (%s)',
implode(', ', array_fill(0, count($values), '?'))
);
$stmt = $db->prepare($sql);
foreach ($values as $value) {
$stmt->bind_param('s', $value);
}
return $stmt;
}
Если вам нравится call_user_func_array
, вы можете использовать динамический вызов метода и обходиться без цикла.
/**
* @param array $values
* @param mysqli $db
* @return mysqli_stmt
*/
function bindInValues(array $values, mysqli $db)
{
$sql = sprintf('SELECT blabla FROM foo WHERE id IN (%s)',
implode(', ', array_fill(0, count($values), '?'))
);
$stmt = $db->prepare($sql);
array_unshift($values, implode('', array_fill(0, count($values), 's')));
call_user_func_array(array($stmt, 'bind_param'), $values);
return $stmt;
}