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 :

LIMIT soucis de compatibilité paramètres ?


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Homme Profil pro
    Freelance
    Inscrit en
    Décembre 2003
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Décembre 2003
    Messages : 423
    Par défaut LIMIT soucis de compatibilité paramètres ?
    Bonsoir à tous,

    en fait je ne viens pas spécialement pour un problème mais juste pour une confirmation de déduction.

    Avant je faisais ceci :

    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
     
    function stock_element($marque,$modele,$type,$debut,$nbMessages)
    {
        $param = array();
        $param[":debut"]=$debut;
        $param[":nbMessages"]=$nbMessages;
    ...
    if ($type!=-1)
        {
            $sql.='AND stock.Type=:type ';
            $param[":type"]=$type;
        }
        $sql.='ORDER BY Marque ASC ';
        $sql.='LIMIT :debut, :nbMessages';
        $statement=$db->prepare($sql);
        $statement->execute($param);
        $result=$statement->fetchAll();
    ...
    Cela dit la requête ne fonctionnait pas...
    Sachant que LIMIT posait souvent des soucis, j'ai commencé par supprimé cette ligne pour vérifier que le reste de ma requête était valide ...
    Ceci étant fait je me suis un peu plus penché sur le pourquoi de ça marchait pas.
    La seule conclusion que j'ai pu en tirer c'est que des paramètres sans signe de comparaison devant ne peuvent fonctionner sour PDO, puisque en faisant comme suit, le code fonctionne :

    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
     
    function stock_element($marque,$modele,$type,$debut,$nbMessages)
    {
        $param = array();
        $param[":debut"]=$debut;
        $param[":nbMessages"]=$nbMessages;
    ...
    if ($type!=-1)
        {
            $sql.='AND stock.Type=:type ';
            $param[":type"]=$type;
        }
        $sql.='ORDER BY Marque ASC ';
        $sql.='LIMIT '.$debut.','.$nbMessages;
        $statement=$db->prepare($sql);
        $statement->execute($param);
        $result=$statement->fetchAll();
    ...
    Alors .... vrai ou faux ?

    Ou en d'autres termes comment faire un LIMIT avec des paramètres ? (comme le reste de mes requêtes)


    Par avance merci

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Un PDOStatement passe les paramètres en binaire plutôt qu'en littéral. C'est ce qui permet d'éviter tout type d'injection SQL. C'est aussi pour cela qu'il n'est pas nécessaire/possible de mettre les guillemets pour les paramètres de type "varchar".

    Visiblement, LIMIT n'accepte pas ses paramètres sous forme binaire.

Discussions similaires

  1. Réponses: 7
    Dernier message: 19/12/2012, 19h59
  2. [Rational Functional Tester] Soucis de compatibilité (Applet)
    Par Aymen- dans le forum Tests et Performance
    Réponses: 2
    Dernier message: 24/04/2007, 11h41
  3. Réponses: 2
    Dernier message: 29/09/2006, 09h36
  4. Limiter les types des paramètres templates?
    Par Pragmateek dans le forum C++
    Réponses: 9
    Dernier message: 29/08/2006, 13h14
  5. Réponses: 4
    Dernier message: 21/08/2006, 03h54

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