2011-11-01 6 views
1

J'ai cette requête mysql en PHP et la première partie fonctionne très bien, mais la seconde partie où la fonction de recherche sur le site ne peut tout simplement pas faire fonctionner correctement. est ici code exact:la fonction de recherche ne fonctionne pas dans ma requête 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->result; 

?> 

Donc cette partie du code à partir de code ci-dessus qui envisage de chercher ma table « jeu » ne fonctionne pas:

$searchText = ""; 
if($_REQUEST['search_text']!=""){ 
    $searchText = $_REQUEST['search_text']; 
$qry .=" WHERE game.bidprice LIKE '%$searchText%' OR game.timelive LIKE '%$searchText%'"; 

Sur ma page, je reçois cette erreur lorsqu'elle est ouverte cette page et essayer de chercher mot « football »:

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 

cette fonction de recherche fonctionne bien quand mettre un peu d'instruction SELECT quelque chose de simple comme: SELECT * FROM jeu mais lorsque vous avez terminé les requêtes plus complexes de sélection avec CASE et QUAND les déclarations que je besoin de son ne fonctionne pas ...

S'il vous plaît me aider avec le code approprié pour la fonction de recherche appropriée

+1

Votre code est vulnérable à l'injection SQL. S'il vous plaît utilisez '$ searchText = mysql_real_escape_string ($ _ REQUEST ['search_text']);' –

Répondre

5

Le problème est que vous ne pouvez pas avoir une clause WHERE après l'ORDER BY. Votre requête ressemble actuellement à ceci:

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 

Mais vous en avez besoin pour ressembler à ceci:

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 

Vous devez ajouter ORDER BY ensuite dans votre script PHP. Essayez quelque chose comme ceci:

$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"; 
+0

Cela fonctionne parfaitement pour moi! Merci beaucoup! – Ivy

3

Vous avez plusieurs erreurs.

Première: Vous mettez le WHERE après le ORDER BY.

Deuxième: En utilisant simplement $searchText = $_REQUEST['search_text'];, vous pouvez recevoir une injection sql.

+0

+1 pour signaler l'injection SQL. –

+0

Merci de m'avoir remarqué que je suis débutant dans ce domaine, donc je ne m'en suis pas rendu compte auparavant. Je vois que Mark Byers l'a aussi modifié en code complet ci-dessus :) – Ivy

Questions connexes