Problème PHP / SQL

Résolu
richard_10 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -  
richard_10 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -
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. maka54 Messages postés 721 Statut Membre 80
     
    $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
    2
  2. richard_10 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   3
     
    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.
    0
  3. Utilisateur anonyme
     
    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%'  ");
    
    0
  4. richard_10 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   3
     
    C'est déjà édité dans le message ...Cependant, rien ne vas :)
    0
    1. Utilisateur anonyme
       
      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 ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. razaonce
     
    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
    }
    
    0
  7. richard_10 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   3
     
    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;  
    }  
    0
    1. Utilisateur anonyme
       
      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
      0
  8. richard_10 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   3
     
    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
    0
    1. Utilisateur anonyme
       
      pardon, remplacez les dump par var_dump, je me trompe de langage...
      0
  9. richard_10 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   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.
    0
  10. richard_10 Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   3
     
    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
    0
  11. Utilisateur anonyme
     
    Bonjour,

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