IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

PDO +SELECT + LIKE [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut PDO +SELECT + LIKE
    Bonjour,

    J'essaye de passer à PDO pour mes requetes Mysql et j'ai un petit soucis.
    Je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $ptBDD =new PDO('mysql:host='.$this->host.';dbname='.$this->nomBDD, $this->login, $this->mdp);
    $ptBDD->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $prep = $ptBDD->prepare($sql);
     
    foreach($_tWhere as $cle=>$val)
    	      $res=$prep->bindParam($cle, $val, PDO::PARAM_STR);
     
    $prep->execute();
    $result = $prep->fetchAll();
    Ma requete $sql est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM Connexion WHERE identifiant=':identifiant' AND mdp=':mdp' AND site LIKE ':SERVER_NAME'
    et mon tableau est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ':identifiant'=>'test'
    ':mdp'=>'test'
    ':SERVER_NAME'=>'%localhost%'
    Je n'ai pas d'erreur (enfin, d'un point de vue code) et en requete directe, elle me retourne bien mon enregistrement mais pas en PDO.

    Bonne journée

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    ton foreach sert a rien, fais direct

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $prep->execute($_tWhere);

  3. #3
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Re,

    Ca ne change pas grand chose.
    J'avais mis ça suite au site de php.net :
    This is WRONG:
    "SELECT * FROM `users` WHERE `firstname` LIKE '%:keyword%'";

    The CORRECT solution is to leave clean the placeholder like this:
    "SELECT * FROM `users` WHERE `firstname` LIKE :keyword";

    And then add the percentages to the php variable where you store the keyword:
    $keyword = "%".$keyword."%";

    And finally the quotes will be automatically added by PDO when executing the query so you don't have to worry about them.

    So the full example would be:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    <?php
    // Get the keyword from query string
    $keyword = $_GET['keyword'];
    // Prepare the command
    $sth = $dbh->prepare('SELECT * FROM `users` WHERE `firstname` LIKE :keyword');
    // Put the percentage sing on the keyword
    $keyword = "%".$keyword."%";
    // Bind the parameter
    $sth->bindParam(':keyword', $keyword, PDO::PARAM_STR);
    ?>

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    que donne : var_dump($result);

  5. #5
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Re,

    Cela me retourne:
    Y-a-t-il un moyen pour avoir la requete complète que PDO envoie à mySQL au moment du execute ?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Paniez Voir le message
    Re,

    Cela me retourne:
    Y-a-t-il un moyen pour avoir la requete complète que PDO envoie à mySQL au moment du execute ?
    ca veut dire que ta requête ne renvoie pas de résultat, parce que ta requete est fausse :

    c'est pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Connexion WHERE identifiant=':identifiant' AND mdp=':mdp' AND site LIKE ':SERVER_NAME'

    c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Connexion WHERE identifiant=:identifiant AND mdp=:mdp AND site LIKE :SERVER_NAME

  7. #7
    Membre régulier Avatar de Paniez
    Homme Profil pro
    Communication & Webservices
    Inscrit en
    Janvier 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Communication & Webservices
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 186
    Points : 107
    Points
    107
    Par défaut
    Re,
    Citation Envoyé par stealth35 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM Connexion WHERE identifiant=:identifiant AND mdp=:mdp AND site LIKE :SERVER_NAME
    Bien vu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PDO] PDO select avant insert
    Par Invité dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/05/2010, 01h14
  2. [MySQL] Select like et quotes
    Par Teppic dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/02/2009, 09h22
  3. cmt faire prendre en compte un _ dans un select like
    Par Mihalis dans le forum Bases de données
    Réponses: 2
    Dernier message: 25/01/2007, 21h46
  4. SELECT ... LIKE %[%
    Par edid dans le forum Oracle
    Réponses: 6
    Dernier message: 14/03/2006, 15h53
  5. requette select like avec un caractere de moins
    Par firejocker dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/10/2005, 09h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo