Я пытаюсь сгенерировать один оператор вставки, который будет вставлять несколько строк. У меня есть и массив значений, который я хочу вставить в таблицу, в которой все используют один и тот же userkey
.
. Я попытался использовать именованный параметр PDO и привязаться к нему, а затем передать в ролевый массив во время выполнения, но это не работает. Поэтому я перешел к заполнителям, но я не могу заставить это работать.
Я называю свою функцию как addUsersRoles(1, [100,101,102]);
И, глядя на сгенерированный SQL, я получаю:
INSERT user_roles (userkey, roleid) VALUES (?,?),(?,?),(?,?)
Я считаю правильным формат для вставки нескольких записей.
Исходя из этого, я пытаюсь сгенерировать:
INSERT user_roles (userkey, roleid) VALUES (1,100),(1,101),(1,102)
Как можно таким образом объединить силу привязки PDO к оператору SQL?
public function addUsersRoles($userkey, $roles = []){
$in = str_repeat('?,', count($roles) - 1) . '?';
$base_user_sql = 'INSERT user_roles (userkey, roleid) VALUES ';
$sql = $base_user_sql;
foreach ($roles as $role) {
//$sql .= "(:USERKEY, $in),"; // Didn't Work
$sql .= "($in),";
}
//Remove trailing comma
$sql = rtrim($sql, ',');
$db = static::getDB();
$stmt = $db->prepare($sql);
//$stmt->bindValue(':USERKEY', $userkey, PDO::PARAM_STR);
return $stmt->execute($roles);
}