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 :

Préparer des requêtes avec un nombre inconnu de variables [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Par défaut Préparer des requêtes avec un nombre inconnu de variables
    Bonjour,

    j'exécute des séries de requêtes comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    $sth = $cnx->prepare("SELECT id, titre
    						FROM $table
    						WHERE
    							xxx LIKE ?
    						AND
    							yyy = ?
    						");
     
    		$sth->bindParam(1, $variable_1);
    		$sth->bindParam(2, $variable_2);
     
    		$variable_1= '%toto%';
    		$variable_2= '%papa%';
    		$sth->execute();
    		$infos_a = $sth->fetchAll ();
    Par la suite, il est simple de passer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	$variable_1= '%tata%';
    		$variable_2= '%maman%';
    		$sth->execute();
    		$infos_b = $sth->fetchAll ();
    MAIS
    comment faire pour passer une commande avec un LIKE = 'tutu' OR LIKE = 'titi', vu que ma requête SELECT est formatée pour ne recueillir qu'1 seule variable ?

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    Si tu utilises des valeurs finies (pas de '%' dans tes clauses LIKE), pourquoi ne pas passer par une clause IN (val1, val2, val3, ...) ?

  3. #3
    Membre éclairé Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Par défaut
    Citation Envoyé par pc.bertineau Voir le message
    Si tu utilises des valeurs finies (pas de '%' dans tes clauses LIKE), pourquoi ne pas passer par une clause IN (val1, val2, val3, ...) ?
    Parce que je n'ai jamais utilisé.

    Pourquoi des '%' dans les clauses LIKE ?
    La réponse est .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $stmt = $dbh->prepare("SELECT * FROM REGISTRY where nom LIKE '%?%'");
    $stmt->execute(array($_GET['nom']));
     
    // un marqueur doit être utilisé à la place d'une valeur complète
    $stmt = $dbh->prepare("SELECT * FROM REGISTRY where nom LIKE ?");
    $stmt->execute(array("%$_GET[nom]%"));
    ?>

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    Malheureusement mon proxy bloque le site...

    La clause IN te permet de chercher parmi une liste de valeurs. Le problème c'est que tu perds l'intérêt des caractères joker du LIKE.

    Mais si tu cherches uniquement à comparer une valeur à une liste d'autres valeurs, IN sera suffisant.

  5. #5
    Membre éclairé Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Par défaut
    Bonne pioche, mais pb avec la liste pour la clause IN

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $sth = $cnx->prepare("SELECT id, titre
    						FROM $table
    						WHERE
    							xxx IN (?)
    						AND
    							yyy = ?
    						");
     
    		$sth->bindParam(1, $variable_1);
    		$sth->bindParam(2, $variable_2);
     
    		$variable_1= 'toto';
    		$variable_2= 'papa';
    		$sth->execute();
    		$infos_a = $sth->fetchAll ();
    Ici, tout est OK parce que ma liste ne comporte qu'un seul élément : toto
    Si $variable_1 est une liste, rien n'est affiché.

    En résumé :
    $variable_1= 'toto'; : OK
    $variable_1= 'toto,tata,tutu'; : PB !!!

    QUESTION : comment passer une liste dans la requête préparée puis dans le bindParam ?

  6. #6
    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
    Ta liste devrait avoir des guillemets 'toto','tata','tutu'
    Il faut voir comment tu la construis
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éclairé Avatar de php_de_travers
    Inscrit en
    Juin 2004
    Messages
    460
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 460
    Par défaut
    http://php.net/manual/fr/pdo.prepare.php
    Vous devez inclure un marquer avec un nom unique pour chaque valeur que vous souhaitez passer dans la requête lorsque vous appelez PDOStatement::execute(). Vous ne pouvez pas utiliser un marqueur avec deux noms pareils dans une requête préparée. Vous ne pouvez associer plusieurs valeurs à un seul marqueur de nom entrant, par exemple, la clause IN() d'une requête SQL.
    Ce qui signifie que cela ne devrait pas fonctionner !

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

Discussions similaires

  1. Liste des tables avec leur nombre d'enregistrements
    Par emilie1t dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 09/10/2012, 16h28
  2. Des macros pour lancer des requêtes avec paramètres
    Par elsergio dans le forum Requêtes
    Réponses: 8
    Dernier message: 17/10/2011, 17h46
  3. ouvrir l'analysuer des requtes avec une requete par defaut
    Par AzizMaroc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/05/2011, 18h11
  4. Réponses: 3
    Dernier message: 30/06/2009, 19h16

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