#php #mysql #search
#php #mysql #Поиск
Вопрос:
У меня есть этот запрос mysql с использованием PHP, и первая часть работает нормально, но вторая часть, в которой есть функция поиска на сайте, просто не может заставить ее работать для правильного поиска. Вот точный код:
<?
$qry = "
SELECT bidprice,timelive,match_title,
CASE
WHEN game.result LIKE '' THEN 'PENDING'
WHEN game.result LIKE 1 THEN 'WON'
END AS result
FROM game
ORDER BY timelive DESC
";
$searchText = "";
if($_REQUEST['search_text']!=""){
$searchText = $_REQUEST['search_text'];
$qry .=" WHERE game.bidprice LIKE '%$searchText%' OR game.timelive LIKE '%$searchText%'";
}
//for pagination
$starting=0;
$recpage = 10;//number of records per page
$obj = new pagination_class($qry,$starting,$recpage);
$result = $obj->resu<
?>
Итак, эта часть кода из приведенного выше кода, которая рассматривает возможность поиска в моей таблице «game», не работает:
$searchText = "";
if($_REQUEST['search_text']!=""){
$searchText = $_REQUEST['search_text'];
$qry .=" WHERE game.bidprice LIKE '%$searchText%' OR game.timelive LIKE '%$searchText%'";
На моей странице я получаю эту ошибку, когда открываю эту страницу и пытаюсь найти слово «футбол»:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'game.bidprice like '%football%' OR game.timelive like '%football%' at line 9
Эта функция поиска работает нормально, когда вводится какой-то простой оператор выбора, например:
ВЫБЕРИТЕ * ИЗ игры
, но когда выполняется более сложный запрос select с операторами CASE и WHEN, которые мне нужны, он не работает…
Пожалуйста, помогите мне с правильным кодом для правильной функции поиска
Комментарии:
1. Ваш код уязвим для SQL-инъекций. Пожалуйста, используйте
$searchText = mysql_real_escape_string($_REQUEST['search_text']);
Ответ №1:
Проблема в том, что у вас не может быть предложения WHERE после ORDER BY . Ваш запрос в настоящее время выглядит следующим образом:
SELECT bidprice,timelive,match_title,
CASE
WHEN game.result LIKE '' THEN 'PENDING'
WHEN game.result LIKE 1 THEN 'WON'
END AS finalization
FROM game
ORDER BY timelive DESC WHERE game.bidprice LIKE '%football%' OR game.timelive LIKE '%football%'
^^^^^^^ error
Но вам нужно, чтобы это выглядело так:
SELECT
bidprice,
timelive,
match_title,
CASE
WHEN game.result LIKE '' THEN 'PENDING'
WHEN game.result LIKE 1 THEN 'WON'
END AS finalization
FROM game
WHERE game.bidprice LIKE '%football%' OR game.timelive LIKE '%football%'
ORDER BY timelive DESC
Вы должны добавить ORDER BY впоследствии в свой PHP-скрипт. Попробуйте что-то вроде этого:
$qry = "
SELECT bidprice,timelive,match_title,
CASE
WHEN game.result LIKE '' THEN 'PENDING'
WHEN game.result LIKE 1 THEN 'WON'
END AS result
FROM game
";
$searchText = "";
if ($_REQUEST['search_text']!="")
{
$searchText = mysql_real_escape_string($_REQUEST['search_text']);
$qry .= " WHERE game.bidprice LIKE '%$searchText%' " .
" OR game.timelive LIKE '%$searchText%'";
}
$qry .= " ORDER BY timelive DESC";
Ответ №2:
У вас есть несколько ошибок.
Во-первых: вы ставите WHERE
после ORDER BY
.
Второе: используя just $searchText = $_REQUEST['search_text'];
, вы можете получить sql-инъекцию.
Комментарии:
1. Спасибо, что заметили меня в этом, поскольку я новичок в этом, поэтому не осознавал этого раньше. Я вижу, что Марк Байерс тоже редактирует это в полном коде выше 🙂