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 pb de passage de parametre [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    378
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 378
    Par défaut PDO pb de passage de parametre
    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
    17
     
    // variable mise en dur pour le test
    $pdeb = 1;
    $plng = 5;
     
    // recherche de x enreg en base
    $sql_recherche = "SELECT * FROM `matable` limit :pdeb,:plng";
     
    $stmt = $GLOBALS["connexion"]->prepare($sql_recherche);
    $stmt->execute(array(':pdeb'=>$pdeb,':plng'=>$plng)); // passage des parametres
    $stmt->setFetchMode(PDO::FETCH_OBJ); 
    while( $data = $stmt->fetch() )
        {
        echo "1"; // pour contrôler le fonctionnement
        }
     
    $stmt->closeCursor(); // libération du curseur
    la connexion est déjà établie car cela fonctionne pour d'autres requêtes à la différence que là c'est du des clauses du limit et cela ne concerne que des nombres.

    Je n'ai pas de message d'erreur mais la répétition de "1" ne se fait pas alors que si je remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $sql_recherche = "SELECT * FROM `matable` limit 1,5";
     
    $stmt = $GLOBALS["connexion"]->prepare($sql_recherche);
    $stmt->execute(); // passage des parametres
    $stmt->setFetchMode(PDO::FETCH_OBJ); 
    while( $data = $stmt->fetch() )
        {
        echo "1"; // pour contrôler le fonctionnement
        }
     
    $stmt->closeCursor(); // libération du curseur
    alors cela fonctionne

    où ai-je raté un point ?

    Merci

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Le dysfonctionnement que tu remarque est normal, on ne peu pas utiliser les paramètres pour des valeurs du LIMIT, ni pour les noms de champs et table, etc...
    Les paramètre sont théoriquement fait pour assurer un certaine intégrité et sécurité sur les données passés en paramètre.
    Quelque part, il n'y a pas de réel danger au niveau de la valeur d'un LIMIT, d'un champ ou d'une table.
    Du moins c'est ainsi que j'interprète la chose.

    Puis imaginons que cela soit permis, on pourrait alors créer une chaine de requête du style :
    '? ? ? ? ? ? = ?'

    et en paramètre :
    SELECT
    champ
    FROM
    table
    WHERE
    champ
    toto

    Ca ne ressemblerait plus à rien, un peu la foire fouille, n'est-ce pas ?


    Exploite directement les variables $pdeb et $plng dans la requête et ça ira.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    378
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 378
    Par défaut
    J'ai trouvé la réponse,
    il faut indiquer que la variable est un entier, sinon il considère que c'est une chaine de caractères

    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
    17
    18
     
    $pdeb = 1;
    $plng = 5;
     
    // recherche de x enreg en base
    $sql_recherche = "SELECT * FROM `matable` limit :pdeb,:plng";
     
    $stmt = $GLOBALS["connexion"]->prepare($sql_recherche);
     $stmt->bindParam(':pdeb', $pdeb, PDO::PARAM_INT);
             $stmt->bindParam(':plng', $plng, PDO::PARAM_INT);
             $stmt->execute();
    $stmt->setFetchMode(PDO::FETCH_OBJ); 
    while( $data = $stmt->fetch() )
        {
        echo "1"; // pour contrôler le fonctionnement
        }
     
    $stmt->closeCursor(); // libération du curseur

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    il faut indiquer que la variable est un entier, sinon il considère que c'est une chaine de caractères
    Tiens donc, j'ai toujours conservé à l'esprit que ce n'était pas possible pour un LIMIT.

    C'est bon à savoir.

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

Discussions similaires

  1. DOS passage de parametre à un .bat
    Par malbaladejo dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 26/11/2014, 15h44
  2. [langage] Passage de parametre lors de l execution
    Par WetzlarMan dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2004, 13h28
  3. Probleme de passage de parametre a un TQuery
    Par gve21 dans le forum C++Builder
    Réponses: 7
    Dernier message: 15/01/2004, 15h49
  4. Passage de parametre calculé
    Par soazig dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 06/06/2003, 16h25
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

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