我正在更新几个php文件,其中包含易受攻击的mysql查询。当然,我的任务是合并预处理语句和参数绑定。然而,我在寻找将以下类型的查询转换为准备好的语句的最佳方法时遇到了麻烦。
'UPDATE `client_media` SET folder ="' . $folder_name . '" WHERE id IN ('.$media_ids.') LIMIT ' . $assetCount;
如果它只是要绑定的数组,这将会容易得多,但是我有一个艰难的时间,因为限制条件出现在数组之后,并且在unpack参数之后应用时会导致问题。
$stmt = $db->prepare($sql);
$types = 's' . str_repeat('i', count($media_ids)) . 'i';
$stmt->bind_param($types, $folder, ...$media_ids, $assetCount);
$stmt->execute();
有什么提示或想法吗?
编辑:谢谢,但这个问题假设唯一的参数是数组。我指的是在数组前后分别准备一个(或多个)参数。
您有两个选择。
-
将值附加到
bind_param()
之前的数组中:$stmt = $db->prepare($sql); $media_id[] = $assetCount; $types = 's' . str_repeat('i', count($media_ids)); $stmt->bind_param($types, $folder, ...$media_ids); $stmt->execute();
-
创建一个数组,然后再次splat:
$stmt = $db->prepare($sql); $types = 's' . str_repeat('i', count($media_ids)) . 'i'; $stmt->bind_param($types, ...[$folder, ...$media_ids, $assetCount]); $stmt->execute();