2013-09-05 2 views
0

Я предполагаю, что моя проблема связана только с синтаксической ошибкой или SORT BY должна появиться до LIMIT, так или иначе после добавления LIMIT в мой запрос следующее выражение генерирует ошибку mysql.OrderBy query Php не работает после добавления LIMIT

$query_pag_data = "SELECT * FROM Apartment LIMIT $start, $per_page";// without LIMIT the if statement works while with LIMIT it doesn't. 

if ($_GET['SortBy']=="Price" || $_GET['SortBy']=="District" ||) { 
$query_pag_data .= "ORDER BY ".$_GET['SortBy']; // It doesn't work if I add LIMIT to my query 
} 

Что такое ошибка и как я могу сделать эту работу с LIMIT и ORDER BY Wout меняющегося мою логику.

+3

Настоящая проблема заключается в том, что вы должны научиться отлаживать SQL-запросы. Простой поиск в Google или чтение ошибки mysql сказали бы вам, что 'ORDER BY' должен быть помещен перед' LIMIT' –

ответ

0

Заполненная SQL следует читать как SELECT, FROM, ORDER BY, LIMIT. Поэтому ваш PHP должен быть написан следующим образом:

$query_pag_data = "SELECT * FROM Apartment"; 

if ($_GET['SortBy']=="Price" || $_GET['SortBy']=="District") { 
    $query_pag_data .= " ORDER BY ".$_GET['SortBy']; 
} 

$query_pag_data .= " LIMIT $start, $per_page" 
+0

Какой смысл в «дезинфекции» '$ _GET ['SortBy']' с 'mysqli_real_escape_string'? какая «дезинфекция» выполняет эта функция? –

+0

@YourCommonSense '$ _GET ['SortBy']' безопасен в использовании, поскольку в SQL-запрос может быть включен «Цена» или «Район». Т.е. нет смысла запускать 'mysqli_real_escape_string' в этой конкретной переменной. 'mysqli_real_escape_string' экранирует символы для использования в запросах mysql для предотвращения SQL-инъекции. Под этим я подразумеваю экранирование кавычек и других символов в строках, а не логические ошибки, такие как 'LIMIT 'a''. Конечно, вы уже знали это :). –

+0

Даже если '$ _GET ['SortBy']' не были отфильтрованы, использование 'mysqli_real_escape_string' было бы столь же бесполезным, как' trim'. И эта функция вообще не имеет никакого отношения к инъекциям SQL. –

1

это будет работать

if ($_GET['SortBy']=="Price" || $_GET['SortBy']=="District") { 
    $query_order_by= " ORDER BY ".$_GET['SortBy']; 
} 
$query_pag_data = "SELECT * FROM Apartment $query_order_by LIMIT $start, $per_page"; 
+0

Спасибо человеку. Это имеет смысл. Я дам ему попробовать прямо сейчас, а затем дайте обратную связь – user2635574

+0

Вы сохранили синтаксическую ошибку от OP –

+0

@YourCommonSense получил ее сэр. –