我正在实施批量删除功能。该应用程序使用 PDO,但我还没有找到一种为此使用准备好的语句的好方法。
我有一个要删除的行 ID 数组,长度不限:
array(3, 5, 8, [...])
使用准备好的语句,我必须创建一串问号以用作占位符,然后绑定值,如下所示:
$question_marks = array();
foreach($ids) $question_marks[] = '?';
$question_marks = join(', ', $question_marks);
$statement = $pdo->prepare('DELETE FROM `table` WHERE `id` IN ('.$question_marks.')');
for($i = 0; $i < count($ids); $i++) {
$statement->bindValue($i + 1, $ids[$i]);
}
$statement->execute();
我的想法是将 ID 类型转换为整数,以便删除任何 SQL 注入,这是我的问题:会吗?
$id_string = array();
foreach($ids as $id) $id_string[] = (int) $id;
$id_string = join(', ', $id_string);
$statement = $pdo->prepare('DELETE FROM `table` WHERE `id` IN ('.$id_string.')');
$statement->execute();
它仍然有点hacky,但在我看来比以前的解决方案要好得多。
这安全吗?有没有替代解决方案?