Problème PHP / SQL

Résolu/Fermé
richard_10 Messages postés 23 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 31 mars 2012 - Modifié par richard_10 le 30/06/2011 à 15:29
richard_10 Messages postés 23 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 31 mars 2012 - 2 juil. 2011 à 02:55
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.
A voir également:

10 réponses

maka54 Messages postés 698 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
1 juil. 2011 à 10:06
$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
richard_10 Messages postés 23 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 31 mars 2012 3
30 juin 2011 à 14:31
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
Utilisateur anonyme
30 juin 2011 à 14:36
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
richard_10 Messages postés 23 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 31 mars 2012 3
30 juin 2011 à 14:49
C'est déjà édité dans le message ...Cependant, rien ne vas :)
0
Utilisateur anonyme
30 juin 2011 à 15:00
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
richard_10 Messages postés 23 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 31 mars 2012 3
Modifié par richard_10 le 30/06/2011 à 15:59
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
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
richard_10 Messages postés 23 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 31 mars 2012 3
30 juin 2011 à 21:57
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
Utilisateur anonyme
1 juil. 2011 à 08:34
pardon, remplacez les dump par var_dump, je me trompe de langage...
0
richard_10 Messages postés 23 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 31 mars 2012 3
1 juil. 2011 à 16:29
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
richard_10 Messages postés 23 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 31 mars 2012 3
2 juil. 2011 à 02:55
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
Utilisateur anonyme
30 juin 2011 à 14:26
Bonjour,

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