Problème PHP / SQL

Résolu
Bonjour,
Je suis entrain de programmer un moteur de recherche pour mon site, et puis dès que je suis arrivé à l'endroit où je dois passer par une recherche approximative dans un champ, sa ne veut pas marché. Concrètement, voilà ce que j'ai pu réalisé:

$req=$bdd->prepare("SELECT champ FROM TABLE    
                                  WHERE champ  LIKE '% :champ %'  ");    
          $req->execute(array("champ" => $_POST["motclef"] ));    
         $resultats=$req->fetchAll();    
         return $resultats;


Cette fonction ne renvoie absolument rien.Toutefois, ma base de données contient bien des résultats qui vont avec cette recherche.Merci pour votre aide.

10 réponses

  1. $req=$bdd->prepare("SELECT champ FROM TABLE    
                          WHERE champ  LIKE :champ  ");    
    $req->execute(array("champ" => '%' . $_POST["motclef"] . '%' ));    
    $resultats=$req->fetchAll();    
    return $resultats;


    il faut mettre les % en dehors de la requete
    1. Salut neo ,oui j'avais déjà essayer cela, mais sa ne marchait pas.En revanche, la solution proposée par maka fonctionne à fond. Merci neo pour ton temps
      1. Salut maka,
        Merci pour ta réponse qui est en effet utile. Et bien oui, tout marche là grâce à toi.Merci encore ainsi que tous les autres qui ont soutenu ce message.
        1. Bonsoir,
          Sa donne une erreur de syntaxte :

          Fatal error: Call to undefined function dump() in C:\Program Files\EasyPHP-5.3.6.0\www\Model\recherche.php on line 23
          Merci pour votre soutien
          1. pardon, remplacez les dump par var_dump, je me trompe de langage...
        2. Salut et merci pour vos réponses. C'étais une faute de frappe neo, et là tout est édité.et bien , j'ai vérifié la valeur de l'index POST avant d'accéder à la fonction et sa donne bien une valeur ( que j'ai saisi ).J'ai tout esseyer. Toujours rien , je vais vous montrer ma requête :
          function rech_pub()  
          {  
          global $bdd;  
          $req=$bdd->prepare("SELECT id_publication, intitule_publication  
                              FROM publication  
                            WHERE intitule_publication LIKE '%:initule_publication%' ");  
          $req->execute(array("intitule_publication" => $_POST["rech"]));  
          $pub=$req->fetchAll();  
          return $pub;  
          }  
          1. vous pouvez nous dire ce qui s'affiche si vous faites ceci à la place ?

            function rech_pub()   
            {   
            global $bdd;   
            
            dump($bdd); 
            $req=$bdd->prepare("SELECT id_publication, intitule_publication   
                                FROM publication   
                              WHERE intitule_publication LIKE '%:initule_publication%' ");   
            dump($req); 
            $req->execute(array("intitule_publication" => $_POST["rech"]));   
            $pub=$req->fetchAll();   
            dump($pub); 
            return $pub;   
            } 
            


            Merci
        3. Bonjour,

          si tu utilise un PDO pour la connexion à la base de données j'ai ça :

          $req = $bdd->query(" SELECT champ FROM table WHERE champ LIKE ' %".$_POST['motclef']."%' "); 
          
          while($resultats = $req->fetch()) 
          {
                // traitement des données
          }
          
          1. C'est déjà édité dans le message ...Cependant, rien ne vas :)
            1. SELECT champ FROM TABLE WHERE champ like '%:champ%'where champ like
              c'est bien ça ?

              et vous avez vérifié que $_POST['motclef'] contient bien une valeur en faisant un echo $_POST['motclef']; avant la requête ?
          2. Désolé, oups, j'avais pas vu, ce n'est pas champ = qu'il faut mettre, mais champ like...

            $req=$bdd->prepare("SELECT champ FROM TABLE  
                                              WHERE  champ like '%:champ%'  ");
            
            1. Merci pour ta réponse,
              Oui, j'avais essayé cela plusieurs fois, j'ai même réaliser toutes les combinaisons possibles. Mais bon, aucun résultat.Merci encore.
              1. Bonjour,

                essayez sans les espaces entre % et :champ et le % qui suit
                $req=$bdd->prepare("SELECT champ FROM TABLE  
                                                  WHERE  champ='%:champ%'  ");