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

Langage PHP Discussion :

PHP requête préparé LIMIT avec variable


Sujet :

Langage PHP

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    juin 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2010
    Messages : 119
    Points : 229
    Points
    229
    Par défaut PHP requête préparé LIMIT avec variable
    Bonjour,
    Avec PHP5.3.25, voici ma requête qui fonctionne:
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $req=$bdd->prepare('SELECT nom FROM articles ORDER BY date_Time DESC LIMIT 0, 3');
    	$req->execute();
    	while($data=$req->fetch()){
    		array_push($arrayAll,$data['nom']);
    	}
    	$req->closeCursor();
    	return $arrayAll;

    Par soucis de sécurité, il faut éviter de mettre des variables directement dans la requête SQl du style (même si elle fonctionne):
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $nbArticlesParPage=3;
         $req=$bdd->prepare('SELECT nom FROM articles ORDER BY date_Time DESC LIMIT 0,'.$nbArticlesParPage);


    J'aimerai donc pouvoir utiliser des variables pour les paramètres de LIMIT, sans sucés jusqu'à présent:
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $nbArticlesParPage=3;
    	$req=$bdd->prepare('SELECT nom FROM articles ORDER BY date_Time DESC LIMIT 0, nbArticlesParPage=:nbArticlesParPage');
    	$req->execute(array('nbArticlesParPage'=>$nbArticlesParPage'));
    	while($data=$req->fetch()){
    		array_push($arrayAll,$data['nom']);
    	}
    	$req->closeCursor();
    	return $arrayAll;

    Avec ce dernier code, je ne vois pas pourquoi il me retourne un tableau vide, alors que le 1er code fonctionne à merveille.
    Si vous avez des piste

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    juin 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2010
    Messages : 119
    Points : 229
    Points
    229
    Par défaut
    Sujet à déplacer peut être dans "PHP & Base de données"

    Je viens de tester avec bindParam et ca à l'aire de fonctionner, ca fait 1h que j'ai fait divers test sans réussir, j'ai probablement omis de modifier la requête SQL avec l’utilisation de bindParam. Du coups voilà le résultat, si cela peut aider d'autre personne:

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $nbArticlesParPage=3;
    	$req=$bdd->prepare('SELECT nom FROM articles ORDER BY date_Time DESC LIMIT 0, :nbArticlesParPage');
    	$req->bindParam(':nbArticlesParPage', $nbArticlesParPage, PDO::PARAM_INT);
    	$req->execute();

    A première vue, sans l'utilisation de bindParam, la variable est convertie en string alors que la requête SQL attend un nombre.
    Si je comprend bien bindParam "remplace", par la valeur associer, le mot qui ce situe dans la chaine SQL?
    Niveau sécurité, c'est correcte?

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    août 2003
    Messages
    6 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 6 571
    Points : 19 470
    Points
    19 470
    Par défaut
    Bonjour,

    si tu lis la doc de PDOStatement::execute tu peux voir que :
    params
    Un tableau de valeurs avec autant d'éléments qu'il y a de paramètres à associer dans la requête SQL qui sera exécutée. Toutes les valeurs sont traitées comme des constantes PDO:ARAM_STR.
    les paramètres sont convertit en string par défaut.

    La solution est donc effectivement d'utiliser bind pour forcer le type.

    Mais dans ce cas précis la requête préparée est inutile , il suffit de vérifier que ta variable est bien un entier avant de l'utiliser et problème résolu.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    juin 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2010
    Messages : 119
    Points : 229
    Points
    229
    Par défaut
    Merci du retour,
    Je marque donc le sujet en résolu.

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

Discussions similaires

  1. Requête BBD - LIMIT avec paramètre variable
    Par didounnet45 dans le forum Langage
    Réponses: 2
    Dernier message: 30/12/2016, 08h58
  2. Requête deux tables avec "variable compteur"
    Par jeanbob2 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 06/03/2013, 18h39
  3. Réponses: 6
    Dernier message: 30/01/2011, 23h50
  4. requête d'analyse avec variable ?
    Par Faro dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 30/05/2008, 11h41
  5. [MySQL] Php et INSERT INTO, avec variables
    Par Djwaves dans le forum PHP & Base de données
    Réponses: 24
    Dernier message: 20/02/2006, 13h53

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