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 :

Requête SELECT avec un LIMIT à 2 variables [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 112
    Points : 74
    Points
    74
    Par défaut Requête SELECT avec un LIMIT à 2 variables
    Bonjour à tous,

    j'utilise PDO pour me connecter sur ma base.
    Je souhaite faire une requête de la sorte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db->prepare("SELECT id, english, french FROM english LIMIT ?, ?");
    Avec évidement l'envoi de 2 paramètres dans la fonction qui appelle cette requête . Seulement, cela ne fonctionne pas, ma valeur de retour est un tableau vide .
    Donc j'aimerais savoir si c'est possible d'avoir des inconnues concernant un LIMIT dans une requête SQL.
    Et si non, comment contourner le problème ?

    Merci d'avance.

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 040
    Points : 23 795
    Points
    23 795
    Par défaut
    Bonjour,

    Je ne connais pas PDO, mais une chose est sûre, c'est que la requête préparée à laquelle on passe les 2 valeurs du LIMIT fonctionne parfaitement sous MySQL.
    Le problème est donc plutôt côté PHP...

    ced

  3. #3
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu as en retour un tableau vide, c'est que ta requete a bien été executée.
    Je verifierais plutot la valeur que je transmet a l'execution.

  4. #4
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 112
    Points : 74
    Points
    74
    Par défaut
    En effet la clause LIMIT fonctionne très bien sous MySQL, je problème arrive dés que je met une inconnue. Voici mon code simplifié à une variable pour un peu plus de détails :
    Ma classe pour gérer ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class englishTable {
    	private $selectAllWithLimit;
     
    	public function __construct($db) {
    		$this->selectAllWithLimit = $db->prepare('SELECT id, english, french FROM english LIMIT 0, ?');
     
    	public function selectAllWithLimit($start) {
                    var_dump($start);
    		$this->selectAllWithLimit->execute(array($start));
    		var_dump($this->selectAllWithLimit->fetchAll());
    		return $this->selectAllWithLimit->fetchAll();
    	}
    }
    Dans mon code principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $start = 3;
    $words = $englishTable->selectAllWithLimit($start);
    Les var_dump indiquent respectivement int(3) (donc la valeur de $start que j'envoie) et array(0) { }!
    J'ai essayé dans tous les sens , l'erreur doit être bête (comme souvent ).
    Ou peut être l'utilisation de LIMIT est restreinte dans certains cas?


  5. #5
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Entre nous, je voudrais valider le fonctionnement de ca, je ferrais une page avec une connexion et une requete.

    Bref, d'apres mes recherches c'est un probleme qui date depuis au moins 2005 et qui n'est toujours pas résolu.

    Tu es obligé d'utiliser bindvalue.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sth->bindValue(':limit', $start, PDO::PARAM_INT );

  6. #6
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 112
    Points : 74
    Points
    74
    Par défaut
    Nan mais le code que j'ai montré n'est que la partie qui nous concerne !
    $sth->bindValue(':limit', $start, PDO:ARAM_INT );
    Merci du tuyau, est ce que tu pourrais me donner plus d'info stp ??
    Que fait bindValue?
    Que reçoit $sth par rapport aux paramètres d'entrés?

  7. #7
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Heu mon $sth c'est ton $this->selectAllWithLimit

    bindvalue c'est une autre methode pour attribuer des valeurs aux requetes préparées.
    l'interet ici c'est qu'on va pouvoir définir le type de la valeur.
    Quand tu mets tes valeurs dans le execute, des guillemets sont automatiquement ajoutés, ce qui fait mauvais genre dans LIMIT

  8. #8
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 112
    Points : 74
    Points
    74
    Par défaut
    Impeccable, après un petit complément de recherche, j'ai une requête contenant un LIMIT avec 2 inconnues !
    Voici le code :
    Ma classe pour gérer ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class englishTable {
    	private $selectAllWithLimit;
     
    	public function __construct($db) {
    		$this->selectWithLimit = $db->prepare('SELECT id, english, french FROM english LIMIT :start, :limit');
     
    	public function selectWithLimit($start, $limit) {
    		$this->selectWithLimit->bindValue(':start', $start, PDO::PARAM_INT );
    		$this->selectWithLimit->bindValue(':limit', $limit, PDO::PARAM_INT );
    		$this->selectWithLimit->execute();
    		return $this->selectWithLimit->fetchAll();
    	}
    }
    Dans mon code principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $start = 5;
    $limit = 7;
    $words = $englishTable->selectWithLimit($start, $limit);
    Merci à tous pour cette aide

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/08/2013, 16h38
  2. Requête select avec variable
    Par katwes dans le forum Débuter
    Réponses: 10
    Dernier message: 29/09/2011, 16h16
  3. Requête SELECT avec deux champs dans une colonne ??
    Par fredhali2000 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 08/06/2006, 11h41
  4. Requête selection avec une variable de date
    Par kahmsin dans le forum Access
    Réponses: 7
    Dernier message: 20/11/2005, 20h38
  5. [Débutant] Requête SELECT avec max et sous-requête
    Par joefou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/07/2005, 15h28

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