Page 1 sur 1

Problème avec LIKE'%$motcle%' et quote()

Posté : 20 avr. 2010, 14:20
par diabless6
Bonjour,

Décidément, j'ai des soucis en PDO :mrgreen:

Donc voilà, j'ai une requête type :
$reqContenu=($contenu=="tous") ?"nom LIKE '%$motcle%' OR prenom LIKE '%$motcle%' OR mail LIKE '%$motcle%'":"$contenu LIKE '%$motcle%' ORDER BY $contenu $ordre";
    $requete="SELECT nom,prenom,mail FROM personne WHERE $reqContenu ";
motcle=$id_con->quote($_POST["motcle"]);
Je veux bien qu'il m'échappe une chaîne dangereuse, mais avec le rajout des quotes ça me fait ça : LIKE '% ' $motcle ' %' . ET donc j'ai un petit soucis là.

J'ai pensé modifier ma requête de cette façon : nom LIKE $motcle

Puis :
$ajout="%".$_POST["motcle"]."%";
    $motcle=$id_con->quote($ajout);
Qui me permet de rajouter les % dans les quotes : nom LIKE '%motcle%' . Seulement, il me prend les % dans le mot clef 8-|

Comment puis-je faire ? A part supprimer quote :lol:

Merci

Re: Problème avec LIKE'%$motcle%' et quote()

Posté : 20 avr. 2010, 14:46
par Aureusms

Re: Problème avec LIKE'%$motcle%' et quote()

Posté : 20 avr. 2010, 14:58
par diabless6
A oui, bonne idée

Merci :wink:

Re: Problème avec LIKE'%$motcle%' et quote()

Posté : 20 avr. 2010, 15:40
par diabless6
 $motcle=addslashes($_POST["motcle"]);
    $contenu=$id_con->quote($_POST["contenu"]);
    $ordre=$id_con->quote($_POST["ordre"]);
    
    //requête
    $reqContenu=($contenu=="tous") ?"nom LIKE'%$motcle%' OR prenom LIKE'%$motcle%' OR mail LIKE'%$motcle%'":"$contenu LIKE'%$motcle%' ORDER BY $contenu $ordre";
    $requete="SELECT nom,prenom,mail FROM personne WHERE $reqContenu ";
    echo '<br/>'.$requete;
    $result=$id_con->query($requete);
Pour les LIKE% % il faut donc changer en :
  $motcle=addslashes($_POST["motcle"]);
    $contenu=addslashes($_POST["contenu"]);
    $ordre=addslashes($_POST["ordre"]);
Je vais pété une durite si ça continue :mrgreen:

Re: Problème avec LIKE'%$motcle%' et quote()

Posté : 20 avr. 2010, 15:44
par stealth35
si t'es en myISAM tu peu utilise MATCH ... AGAINST
sinon faire un COALESCE de tout les champs que tu veux et faire 1 seul LIKE la dessus :wink:

Re: Problème avec LIKE'%$motcle%' et quote()

Posté : 20 avr. 2010, 17:10
par diabless6
si t'es en myISAM tu peu utilise MATCH ... AGAINST
sinon faire un COALESCE de tout les champs que tu veux et faire 1 seul LIKE la dessus :wink:
I LIKE you but example please !

Un seul like mais comment fait on stp :P

Ensuite je suis entrain de faire un gateau Fetch, mais je ne sais pas qu'elle recette utilisée:

le FetchAll sans boucle mais pour les gourmands...
ou le Fetch seul avec boucle plus light parait-il....

Il faut faire du code qui monopolise le moins les serveurs (soyons écolos :mrgreen: )

:twisted:
 $nbcol=$result->columnCount();
    $nblig=$result->rowCount();
    echo"<br/>nb de personnes: $nblig correspond à $motcle<br/><br/>";
    for($i=0;$i<$nblig;$i++)
    {
    $tab_result[$i]=$result->fetch(PDO::FETCH_ASSOC);
    }
    //print_r($tab_result);echo'<br/>';
if(!empty($tab_result))
{    
   
    for($i=0;$i<$nblig;$i++)
    {
    echo '<b>Nom: </b>'.$tab_result[$i]['nom'].'<br/><b>Prenom: </b>'.$tab_result[$i]['prenom'].'<br/><b>Mail: </b>'.$tab_result[$i]['mail'].'<br/>';
    echo'***********<br/>';   
 }   
 }  
$result->closeCursor();
$id_con=NULL; 
 

Re: Problème avec LIKE'%$motcle%' et quote()

Posté : 20 avr. 2010, 17:37
par stealth35
pour faire en une seul c'est avec CONCAT_WS (pas COALESCE mais qu'on peux utilise contre les champs NULL)

tu ferais donc
SELECT nom,prenom,mail  FROM TABLE WHERE CONCAT_WS('~', nom, prenom, mail) LIKE  '%$motcle%' 
ca donnera : nom~prenom~email

si tu cherche : %mail% ca marchera
le ~ c'est pour evité que la recherche se fasse entre 2 mots, ducoup on met un caratere bidon ici : ~
si tu chercherais "mema" il va donc le trouver dans : nomprenomemail

Re: Problème avec LIKE'%$motcle%' et quote()

Posté : 20 avr. 2010, 17:44
par stealth35
pour fetch ou fetchAll

plus simple comme ca non ?
$nbcol	= $result->columnCount();
$nblig	= $result->rowCount();

echo"<br/>nb de personnes: $nblig correspond à $motcle<br/><br/>";

$tab_result = $result->fetchAll(PDO::FETCH_ASSOC);
//print_r($tab_result);echo'<br/>';

if(!empty($tab_result))
{
    foreach($tab_result as $result)
    {
        echo '<b>Nom: </b>'.$result['nom'].'<br/>';
        echo '<b>Prenom: </b>'.$result['prenom'].'<br/>';
        echo '<b>Mail: </b>'.$result['mail'].'<br/>';
        echo '***********<br/>';  
    }  
}

$result->closeCursor();
$id_con=NULL;

Re: Problème avec LIKE'%$motcle%' et quote()

Posté : 20 avr. 2010, 18:29
par diabless6
SELECT nom,prenom,mail FROM personne WHERE CONCAT_WS('~', nom, prenom, mail) LIKE '%fr%'
nb de personnes: 2 correspond à fr
ça marche ! 8-)

A oui avec le foreach c'est mieux mais j'ai cette erreur :

Fatal error: Call to a member function closeCursor() on a non-object

Re: Problème avec LIKE'%$motcle%' et quote()

Posté : 20 avr. 2010, 18:34
par stealth35
ouai c'est parce que dans le foreach j'ai appelé la variable "result" aussi faudra mettre autre chose :wink:

Re: Problème avec LIKE'%$motcle%' et quote()

Posté : 20 avr. 2010, 18:38
par diabless6
ouai c'est parce que dans le foreach j'ai appelé la variable "result" aussi faudra mettre autre chose :wink:
Ha ben d'accords je cherchai l'erreur ailleurs mdr :mrgreen:

Merci Stealth :wink:

Re: Problème avec LIKE'%$motcle%' et quote()

Posté : 20 avr. 2010, 18:46
par stealth35
d'ailleurs si t'as rien après, tu peux supprimer
$result->closeCursor();
$id_con=NULL;
closeCursor c'est pour réinitialiser le statement
et t'es pas obligé de supprimer la connexion puisqu'elle se libère a la fin du script :wink:


pour la recherche FULLTEXT c'est par ici
http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html

Re: Problème avec LIKE'%$motcle%' et quote()

Posté : 20 avr. 2010, 18:52
par AB
Sinon pour éviter addslashes (qui fait un peu déplacé avec pdo) ce serait peut-être l'occasion de s'intéresser aux requêtes préparées...

Re: Problème avec LIKE'%$motcle%' et quote()

Posté : 20 avr. 2010, 18:57
par diabless6
@Stealth35
Je suis pas obligée, mais vaut mieux prévenir que guérir mdr :mrgreen:
Surtout moi au passage :roll:

@AB
Je m'y "prépare" bientôt dans les prochaines pages avec les transactions.... #-o

Vous faites comment pour vous rappelez de tout ! Vous avez une mémoire d'éléphant :mrgreen:

Je crois que je vais me faire des fiches :roll:

Re: Problème avec LIKE'%$motcle%' et quote()

Posté : 20 avr. 2010, 19:23
par AB
@Stealth35
Je suis pas obligée, mais vaut mieux prévenir que guérir mdr :mrgreen:
Surtout moi au passage :roll:

@AB
Je m'y "prépare" bientôt dans les prochaines pages avec les transactions.... #-o

Vous faites comment pour vous rappelez de tout ! Vous avez une mémoire d'éléphant :mrgreen:

Je crois que je vais me faire des fiches :roll:
C'est le même principe qu'avec mysql ou mysqli, quand le script est terminé la connexion se libère automatiquement donc tu n'auras rien à guérir :wink:
Mais cela peut être utile si tu as un script très très long, ainsi tu peux si possible libérer la connexion avant qu'il soit entièrement lu.

Pour les requêtes préparées, ça devrait aller vite pour ta requête car il y a un exemple de comment faire (et ne pas faire) pour utiliser LIKE dans l'exemple 12 du manuel :wink: