2 回答

TA貢獻1859條經驗 獲得超6個贊
您也可以使用占位符??聪旅娴睦樱?/p>
public function addUsersRoles(string $userKey, array $roles = []): bool
{
$values = [];
$inputParameters = [':user_key' => $userKey];
foreach ($roles as $index => $role) {
$rolePlaceholder = ':roleid' . $index;
$values[] = sprintf('(:user_key, %s)', $rolePlaceholder);
$inputParameters[$rolePlaceholder] = $role;
}
$sql = 'INSERT INTO user_roles (user_key, roleid) VALUES ';
$sql .= implode(', ', $values);
$db = static::getDB();
$stmt = $db->prepare($sql);
return $stmt->execute($inputParameters);
}
此代碼將生成如下查詢:
INSERT INTO user_roles (user_key, roleid) VALUES (:user_key, :roleid0), (:user_key, :roleid1), (:user_key, :roleid2), (:user_key, :roleid3), (:user_key, :roleid4);
$inputParameters 將是這樣的:
[
':user_key' => 'some user key',
':roleid0' => 1,
':roleid1' => 2,
]

TA貢獻1871條經驗 獲得超8個贊
count($roles)制作時不應該使用$in。它總是只是?, ?。對所有行重復該操作時,您只需要角色計數。您可以使用array_fill創建一個字符串數組(?, ?),然后implode在它們之間放置逗號。
您還需要插入創建具有交替鍵和角色的數組,并在執行時將其用作參數。
public function addUsersRoles($userkey, $roles = []){
$values = implode(',', array_fill(0, count($roles), '(?, ?)'));
$base_user_sql = 'INSERT user_roles (userkey, roleid) VALUES ';
$sql = $base_user_sql . $values;
$keys_and_roles = [];
foreach ($roles as $role) {
$keys_and_roles[] = $userkey;
$keys_and_roles[] = $role;
}
$db = static::getDB();
$stmt = $db->prepare($sql);
return $stmt->execute($keys_and_roles);
}
- 2 回答
- 0 關注
- 139 瀏覽
添加回答
舉報