- 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
Konardo 21.02.2014 11:24 # −23
bormand 21.02.2014 12:16 # 0
defecate-plusplus 21.02.2014 12:29 # 0
в том же оракле через jdbc можно замутить через нативные классы
только орм это, конечно же, не будут уметь, т.к. они заточены на универсальность
dead_star 21.02.2014 14:45 # +1
даже если не прибегать к каким-то другим фичам
выглядит жутко, но по крайней мере это 1 запрос
dead_star 21.02.2014 14:40 # 0
нормальное решение:
выполнить 1 запрос вместо 20
defecate-plusplus 21.02.2014 15:10 # +2
и если можно, с употреблением prepare, bind_param, или что там в пыхе используется
dead_star 21.02.2014 16:20 # 0
общая суть сводится к тому что над тем же PDO создается еще один уровень абстракиции в котором реализается поддержка placeholder-ов.
?l - позволяет делать выборку по списку параметров
defecate-plusplus 21.02.2014 16:50 # 0
также я знаю, что можно биндить целые числа, строки, дробные числа и blob
http://php.net/manual/ru/mysqli-stmt.bind-param.php
это не новость и сделано в угоду универсальности
а вот что такое l - я не знаю
и по ссылке, где есть "немного теории" такого тоже нет
вот и спрашиваю
как я уже выше писал, я знаю, что конкретно в oracle я могу забиндить ARRAY
например, передав его вообще как параметр хранимой процедуры
в такое не умеет, например, даже hibernate, потому что бинд массива как параметра - субд-специфично
причем передать не как список ?,?,?,?,? или аналогичный, а именно как один ?, где ? - само по себе коллекция
надеюсь, всем понятно, что select ... in (?) и select ... in (?,?) - это два разных запроса для кеша запросов?
dead_star 21.02.2014 17:58 # 0
я привел его здесь как вариант псевдокода, а не как конкретная реализация.
прошу прошения что мой псевдокод вызвал больше вопросов чем ответов
по теме
этот плайсхолдер передает именно список
объясни на примере что бы было понятней
драйверу верхнего уровня передается запрос
select ... in (?l)
который внутри преобразовывается в
select ... in (?,?,?,?)
и передается в драйвер низкого уровня который в свою очередь преобразовывает его в окончательный вид
select ... in (1,2,3,4)
и отправляет его базе данных
на моей предыдущей работе драйвер бд был заточен под MySQL и сразу преобразовывал из select ... in (?l) в select ... in (1,2,3,4) без дополнительной прослойки в виде PDO
defecate-plusplus 21.02.2014 18:09 # 0
select ... in (1,2,3,4)
и отправляет его базе данных
что за ерунда, движок СУБД должен принимать prepared statement, а не драйвер низкого уровня должен что-то там подставлять до отправки СУБД
неужели mysql это не умеет? и всё, для чего вам нужны prepared - это лишь для "экранирования"
anonimb84a2f6fd141 21.02.2014 18:25 # 0
Для рнр это уже неебический прогресс.