ORDER BY по дате, а также с использованием LIMIT в запросе MySQL - PHP

HI,

Я не могу понять это, я пытаюсь извлечь записи из MySQL, упорядочить их в обратном хронологическом порядке и ограничить результаты четырьмя на странице (и используя разбиение на страницы для организации страниц). В настоящее время он возвращает эту ошибку:

Неустранимая ошибка: SQL в /Users/allan/Sites/4is_site/casestudylist.php в строке 126

$limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page;
$query = "SELECT * FROM studies  ORDER BY date desc WHERE niche = '{$_GET['niche']}' $limit";

Разбивка на страницы работает нормально, только сейчас, когда я попытался добавить ORDER BY, у меня возникли проблемы.


person user96828    schedule 01.07.2009    source источник
comment
Кроме того, я слышал, что мне нужно избежать этого: '{$_GET['niche']}', как мне это сделать?   -  person user96828    schedule 01.07.2009


Ответы (2)


Этот синтаксис неверен. Это должно работать.

$escapedNiche = mysql_real_escape_string($_GET['niche']);
$query = "SELECT * FROM studies WHERE niche = '$escapedNiche' ".
         "ORDER BY date DESC $limit";

Для дальнейшего использования - Синтаксис SELECT

person Abhinav Gupta    schedule 01.07.2009

Кстати, чтобы избежать $_GET['niche']:

$clean_niche = mysql_escape_string($_GET['niche']);
$limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page;
$query = "SELECT * FROM studies  "
        ."WHERE niche = '{$clean_niche}' "
        ."ORDER BY date desc $limit";

Это поможет защитить вас от атак SQL-инъекций, экранируя символы в $_GET['niche'].

Для дополнительной безопасности рассмотрите возможность использования связанных параметров (google'em) и/или библиотечных функций, таких как Zend DB, для доступа к базе данных.

person Ali    schedule 01.07.2009
comment
mysql_escape_string очищает ввод только в том случае, если ввод заключен в кавычки. Чтобы очистить ограничение, вы можете проверить, что параметр «ниша» является целым числом, используя is_numeric(). - person diedthreetimes; 11.04.2011