Я реализую функцию массового удаления. Приложение использует 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();
То, что я имел в виду, было бы приведение идентификаторов в целое число, чтобы любая 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();
Это все еще немного взломанно, но, на мой взгляд, гораздо приятнее предыдущего решения.
Это безопасно? Есть ли альтернативные решения?