+156
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
while(true)
{
$i++; if ($i == 10) { $res = array(); break;}
$site = dq("
SELECT a.username, a.id, a.url, a.title
FROM ylike a
LEFT JOIN amp_a_users b ON b.username = a.username
LEFT JOIN view_log c ON c.username = '".$user_n."' AND c.video_id = a.id
WHERE a.active = '1' AND b.video_credits >0 AND (c.video_id IS NULL AND a.username !='".$user_n."')
ORDER BY RAND()
LIMIT 1");
$res = mysqli_fetch_array($site);
if ($chkd[$res[url]] == 1)
{continue;}
else{
$chkd[$res[url]] = 1;
}
if (get_likes($res[url])>=0){break;}
$res = array();
}
Суть функционала в том что пользователи добавляют видео с youtube и покупают так называемые кредиты. И когда кто-то смотрит твое видео он получает 1 кредит, при этом у тебя снимается. Блок кода направлен на то чтобы найти видео, которое ты еще не смотрел, активное и не личное.
$user_n = логин текущего пользователя. Кода наглядно показывает как правильно, оптимизировано это все реализовать.
Мало того того что запросы в цикле, так еще и и join происходит по varchar. Кстати чувак вобще вместо id юзеров использует логины пользователей для зависимостей пользователя и его различных данных.
get_likes() по логике не понятно для чего, потому что функция запрашивает с youtube количество лайков, и по сути оно может быть либо 0 либо больше.
Запостил:
reddevil,
22 Июля 2014
Или в мануалах по ПХП предпочитают не нагружать обучаемого лишними абстракциями?
Нужно числовое значение => делаем intval, все невалидные значения сами обрубятся.
Нужно значение из списка => ищем его в этом списке перед отправкой запроса.
Нужно произвольное строковое => таки да, апострофы придётся экранировать.
Вот здесь-то ORM и спасает.
Или подготовленные запросы хотя бы.
Не про ОРМ, конечно, но изобретательная макака найдёт способ протащить инъекцию даже через фреймворки. От необходимости думать дополнительные инструменты не спасают.
По крайней мере, ничего экранировать не придётся. Да и ОРМ можно как маппер использовать, если писать лень.
Как там, оракел, после 10g научился без головной боли отдавать датасеты из хранимок?
http://www.oracle-base.com/articles/misc/using-ref-cursors-to-return-recordsets.php
Как-то хардкорненько...
в оракле (желательно в пакете) - function foobar(...) return my_cursor_type;
даже тупой jdbc сгенерит ResultSet и при "select ...", и при "{? = call foobar(...)}" (с RegisterOutParameter)
тем более хибернейт (со своим хинтом callable)
кому особо печёт, и его любимая IDE плохо выводит тот может написать отдельную pipelined функцию-обертку, которая на входе примет курсор, а на выходе будет гадить прочитанными из этого курсора записями
тогда можно будет делать но так мало кто делает, т.к. обычно незачем
Давно у нас не было срачей по СУБД, поэтому на правах офтопика оставлю этот багор здесь: http://chabapok.livejournal.com/34730.html
чем ему не угодил системный пакет utl_raw, где есть всё - я не знаю
но я точно знаю, что субд - последнее место, где нормальный человек будет ксорить биты
Мускуль - говносубд, кладущая хуй на стандарты. Причем не только на стандарты де-факто, но, порой, даже на де-юре...
>>Мускуль - говносубд, кладущая хуй на стандарты
Sun - контора, кладущая хуй на стандарты
fixed
А Sun то че. Мускуль и до них таким же говнищем был, если не хуже.
Sun dead baby, Sun dead.
Срача не вышло, потому что попал в точку.
Потому что кроме него ничего нет на бесплатных (да и не только) хостингах. Очередной порочный круг, блеать.
P.S. А за пределами веба его разве часто юзают?
Ну да, морды акцесса не будет. Но драйвер microsoft jet работал из коробки как бы не начиная с 98й винды. Поэтому проги с mdb в качестве локальной базы отлично работали на всём подряд...