функция поиска не работает в моем запросе PHP MySQL

#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. Спасибо, что заметили меня в этом, поскольку я новичок в этом, поэтому не осознавал этого раньше. Я вижу, что Марк Байерс тоже редактирует это в полном коде выше 🙂