PHP: $qry = "SELECT c.id, c.name, COUNT(q.question) total FROM {$TBL['category']} c LEFT JOIN {$TBL['question']} q ON c.id = q.category_id WHERE c.parent_id=$parentId <========= $filter GROUP BY c.id, c.name ORDER BY c.rank, c.name"; $rsl = mysql_query($qry) or die(mysql_error()); кто как думает.. возможна ли тут mysql inj если параметр $parentId не фильтруется ??? на всякий случай кидаю запрос который получается и ответ на него SELECT c.id, c.name, COUNT(q.question) total FROM odfaq_category c LEFT JOIN odfaq_question q ON c.id = q.category_id WHERE c.parent_id=9999 union select 1,2,3/* AND (IFNULL(c.active, 'Y') = 'Y' AND IFNULL(q.active, 'Y') = 'Y') GROUP BY c.id, c.name ORDER BY c.rank, c.name Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
ну там magic_quotes = on и if (!($parentId > 0)) die; т.е. в начале запроса всегда должна быть цифра .. к примеру 9999 union select 1,2,3/* только вот если подставить 9999 union select 1,2,3/* - получается ошибка Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
2 cash http://bugs.mysql.com/bug.php?id=29421 2 j0ze Добавив union select 1,2,3/*, ты закоментировал символами /* оставшуюся часть запроса PHP: AND (IFNULL(c.active, 'Y') = 'Y' AND IFNULL(q.active, 'Y') = 'Y') GROUP BY c.id, c.name ORDER BY c.rank, c.name А в любом справочнике написано, что Sql не позволяет использовать агрегирующие функции (count, min, max) в запросе с выводом более одного поля без групировки (group by), отсюда и ошибка. Так что извини парень, скуля здесь не прокатит.
Попробуй не 9999 а существующие значение. ИМХО Данная функция считает общее кол-во и ставит рамки на min() и max() и в итоге должна получиться слепая иньекция.