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. 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. 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. 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. 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. 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
          2. 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...
          3. 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. 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. Bonjour,

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