+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
Elvenfighter 22.07.2014 18:07 # 0
kegdan 22.07.2014 18:23 # 0
TauSigma 22.07.2014 18:21 # 0
Или в мануалах по ПХП предпочитают не нагружать обучаемого лишними абстракциями?
kegdan 22.07.2014 18:28 # 0
Vasiliy 22.07.2014 18:46 # +1
TauSigma 22.07.2014 22:55 # 0
inkanus-gray 22.07.2014 23:35 # +1
Нужно числовое значение => делаем intval, все невалидные значения сами обрубятся.
Нужно значение из списка => ищем его в этом списке перед отправкой запроса.
Нужно произвольное строковое => таки да, апострофы придётся экранировать.
myaut 23.07.2014 00:14 # +1
Вот здесь-то ORM и спасает.
bormand 23.07.2014 05:28 # +1
Или подготовленные запросы хотя бы.
inkanus-gray 23.07.2014 11:01 # +2
Не про ОРМ, конечно, но изобретательная макака найдёт способ протащить инъекцию даже через фреймворки. От необходимости думать дополнительные инструменты не спасают.
TauSigma 23.07.2014 09:31 # +1
По крайней мере, ничего экранировать не придётся. Да и ОРМ можно как маппер использовать, если писать лень.
Vasiliy 23.07.2014 11:59 # +1
TauSigma 23.07.2014 12:48 # 0
Как там, оракел, после 10g научился без головной боли отдавать датасеты из хранимок?
defecate-plusplus 23.07.2014 15:55 # 0
TauSigma 23.07.2014 18:09 # 0
http://www.oracle-base.com/articles/misc/using-ref-cursors-to-return-recordsets.php
Как-то хардкорненько...
defecate-plusplus 23.07.2014 18:58 # +3
в оракле (желательно в пакете) - function foobar(...) return my_cursor_type;
даже тупой jdbc сгенерит ResultSet и при "select ...", и при "{? = call foobar(...)}" (с RegisterOutParameter)
тем более хибернейт (со своим хинтом callable)
кому особо печёт, и его любимая IDE плохо выводит тот может написать отдельную pipelined функцию-обертку, которая на входе примет курсор, а на выходе будет гадить прочитанными из этого курсора записями
тогда можно будет делать но так мало кто делает, т.к. обычно незачем
inkanus-gray 25.07.2014 08:53 # 0
Давно у нас не было срачей по СУБД, поэтому на правах офтопика оставлю этот багор здесь: http://chabapok.livejournal.com/34730.html
defecate-plusplus 25.07.2014 09:33 # 0
чем ему не угодил системный пакет utl_raw, где есть всё - я не знаю
но я точно знаю, что субд - последнее место, где нормальный человек будет ксорить биты
bormand 25.07.2014 09:40 # +1
defecate-plusplus 25.07.2014 10:01 # +1
bormand 25.07.2014 09:34 # +5
Мускуль - говносубд, кладущая хуй на стандарты. Причем не только на стандарты де-факто, но, порой, даже на де-юре...
kegdan 25.07.2014 10:48 # 0
>>Мускуль - говносубд, кладущая хуй на стандарты
Sun - контора, кладущая хуй на стандарты
fixed
bormand 25.07.2014 10:52 # 0
А Sun то че. Мускуль и до них таким же говнищем был, если не хуже.
3.14159265 25.07.2014 13:57 # +2
Sun dead baby, Sun dead.
kegdan 25.07.2014 14:11 # 0
3.14159265 25.07.2014 13:56 # 0
Срача не вышло, потому что попал в точку.
inkanus-gray 25.07.2014 22:14 # 0
bormand 25.07.2014 22:21 # +1
Потому что кроме него ничего нет на бесплатных (да и не только) хостингах. Очередной порочный круг, блеать.
P.S. А за пределами веба его разве часто юзают?
inkanus-gray 25.07.2014 23:20 # 0
kegdan 26.07.2014 03:32 # 0
bormand 26.07.2014 05:07 # 0
kegdan 26.07.2014 07:22 # 0
TauSigma 28.07.2014 12:14 # 0
bormand 28.07.2014 12:38 # +2
Ну да, морды акцесса не будет. Но драйвер microsoft jet работал из коробки как бы не начиная с 98й винды. Поэтому проги с mdb в качестве локальной базы отлично работали на всём подряд...
eth0 22.07.2014 19:19 # +1
TauSigma 22.07.2014 22:55 # 0
inkanus-gray 22.07.2014 23:37 # 0
defecate-plusplus 23.07.2014 00:00 # +3
eth0 23.07.2014 20:08 # 0