我正在尝试生成一个插入语句,该语句将插入多行。我有一个值数组,这是我想要插入到均使用相同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);
}
我正在尝试生成一个插入语句,该语句将插入多行。我有一个值数组,这就是我想要插入到均使用相同用户键的表中的值。我有...
制作count($roles)
时,请勿使用$in
。总是?, ?
。在所有行重复该操作时,只需要角色计数即可。您可以使用array_fill
创建由(?, ?)
字符串组成的数组,然后使用implode
在它们之间放置逗号。
我已经简化了一点,但这分为两个部分,它们一起完成。首先是生成SQL ...
您也可以使用占位符。看下面的例子: