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 et REGEXP ou LIKE sur un parametre


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut PDO et REGEXP ou LIKE sur un parametre
    Bonjour à tous,

    Je cherche à implémenter une fonction de recherche dans une bdd MySQL à l'aide de méthodes PDO.

    Je prépare donc ma requête, je bind les paramètres mais j'obtiens toujours un résultât vide.

    Il doit y avoir une erreur quelque part mais je n'ai aucun warning/erreur à l'exécution dc ca ne doit pas être de la syntaxe...

    Est-ce que qqn aurait une idée?

    Voila le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->searchExp=$db->prepare("SELECT id FROM maTable WHERE  :exp REGEXP '[[:<:]]:exp[[:>:]]' ");
    je bind comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function searchExp($exp){
    	$this->searchExp->bindValue(':exp', $exp, PDO::PARAM_STRING);
            $this->searchExp->execute();
            return $this->searchExp->fetchAll();
    }
    PS: s'il existe une meilleure méthode, je reste ouvert.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Est-ce que tu as validé le fonctionnement de ta requête dans phpmyadmin ?

    Pourquoi ne pas faire un simple LIKE ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 17
    Par défaut
    Je n'ai pas testé mais j'ai l'impression que PDO n'aime pas le paramètre après le WHERE. L'erreur viendrait plutôt de WHERE :exp plutôt que de l'expression régulière elle même. Essaie ceci pour confirmer ce point :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $this->searchExp=$db->prepare("SELECT id FROM maTable WHERE  :exp = 'test'");	
     
    $this->searchExp->bindValue(':exp', $exp, PDO::PARAM_STRING);
    $this->searchExp->execute();

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    d'ailleurx $exp c'est le nom du champ ou la valeur qu'il doit prendre ?
    dans ta requête c'est les deux.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut ...
    Merci à tous d'avoir répondu.

    @mseye: j'ai testé et les paramètres après un WHERE sont bien gérés.

    @sabotage: normalement c'est le nom du champs, ici c'était juste un test pq quand j'essaye de mettre le nom de colonne genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->searchExp=$db->prepare("SELECT id FROM maTable WHERE  maColonne REGEXP '[[:<:]]:exp[[:>:]]' ");
    alors j'ai une erreur sur le nombre de paramètre; le :exp de '[[:<:]]:exp[[:>:]]' n'est pas reconnu comme paramètre...

    Master Edit:
    Pour ceux qui chercheraient la solution que j'ai mis une aprem à trouver,
    il suffisait de d'affecter l'expression régulière avant de binder le param/value.
    Concrètement ça donne pour mon cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $exp = '[[:<:]]'.$exp.'[[:>:]]';
    $this->searchExp->bindValue(':exp', $exp, PDO::PARAM_STR);
    Voilà, en espérant que ça puisse en aider

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 26
    Par défaut
    Question subsidiaire,
    personne ne connait un "raccourci" pour chercher l' :exp dans toute une table plutôt que d'énumérer chacune des colonnes dans des OR ?

    Thanks.

Discussions similaires

  1. group by sur deux parametres
    Par adilou1981 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/05/2005, 11h11
  2. Recherche d'un mot avec LIKE sur plusieurs champs
    Par reynhart dans le forum Langage SQL
    Réponses: 16
    Dernier message: 26/11/2004, 17h41
  3. [DB2] LIKE sur des entiers
    Par heloise dans le forum DB2
    Réponses: 1
    Dernier message: 07/10/2004, 23h30
  4. [LG]J'ai honte : question de cours sur les paramètres
    Par letibdesneiges dans le forum Langage
    Réponses: 14
    Dernier message: 17/01/2004, 13h57
  5. [VB6] [ADO] Like sur base Access
    Par dlpxlid dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 24/01/2003, 11h03

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