- 1
- 2
- 3
foreach ($_REQUEST['id'] as $id) {
$db->execute('DELETE FROM `comments` WHERE `id` = ?', $id);
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+133
foreach ($_REQUEST['id'] as $id) {
$db->execute('DELETE FROM `comments` WHERE `id` = ?', $id);
}
удаление нескольких комментариев по id
в том же оракле через jdbc можно замутить через нативные классы
только орм это, конечно же, не будут уметь, т.к. они заточены на универсальность
даже если не прибегать к каким-то другим фичам
выглядит жутко, но по крайней мере это 1 запрос
нормальное решение:
выполнить 1 запрос вместо 20
и если можно, с употреблением prepare, bind_param, или что там в пыхе используется
общая суть сводится к тому что над тем же PDO создается еще один уровень абстракиции в котором реализается поддержка placeholder-ов.
?l - позволяет делать выборку по списку параметров
также я знаю, что можно биндить целые числа, строки, дробные числа и blob
http://php.net/manual/ru/mysqli-stmt.bind-param.php
это не новость и сделано в угоду универсальности
а вот что такое l - я не знаю
и по ссылке, где есть "немного теории" такого тоже нет
вот и спрашиваю
как я уже выше писал, я знаю, что конкретно в oracle я могу забиндить ARRAY
например, передав его вообще как параметр хранимой процедуры
в такое не умеет, например, даже hibernate, потому что бинд массива как параметра - субд-специфично
причем передать не как список ?,?,?,?,? или аналогичный, а именно как один ?, где ? - само по себе коллекция
надеюсь, всем понятно, что select ... in (?) и select ... in (?,?) - это два разных запроса для кеша запросов?
я привел его здесь как вариант псевдокода, а не как конкретная реализация.
прошу прошения что мой псевдокод вызвал больше вопросов чем ответов
по теме
этот плайсхолдер передает именно список
объясни на примере что бы было понятней
драйверу верхнего уровня передается запрос
select ... in (?l)
который внутри преобразовывается в
select ... in (?,?,?,?)
и передается в драйвер низкого уровня который в свою очередь преобразовывает его в окончательный вид
select ... in (1,2,3,4)
и отправляет его базе данных
на моей предыдущей работе драйвер бд был заточен под MySQL и сразу преобразовывал из select ... in (?l) в select ... in (1,2,3,4) без дополнительной прослойки в виде PDO
select ... in (1,2,3,4)
и отправляет его базе данных
что за ерунда, движок СУБД должен принимать prepared statement, а не драйвер низкого уровня должен что-то там подставлять до отправки СУБД
неужели mysql это не умеет? и всё, для чего вам нужны prepared - это лишь для "экранирования"
Для рнр это уже неебический прогресс.