Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Je veux extraire les données de ma table

$req = $bdd->prepare('SELECT * FROM date_picker ORDER BY date_picker DESC LIMIT 10');

while ($donnees = $req->fetch()){
         echo $donnees['date_picker'];
 } 

Ce que je veux

Extraire les données de mon champ date_picker qui se trouve dans ma table date_picker

Ce que j'obtiens

J'obtiens une page blanche alors que ma requête saisie dans phpmyadmin me renvoie bien les résultats. Je vous remercie de votre aide.

5 réponses


Salut,

Pourquoi faire une requête préparée si tu n'as pas de data conditionnelles à y injecter ? Sais-tu au moins ce que tu fais ?
Dans ton cas, la méthode query de l'objet PDO suffirait.

$q =  "SELECT * FROM date_picker ORDER BY date_picker DESC LIMIT 10";
$rows = $bdd->query($q);

foreach  ($rows as $row) {
  // ton traitement sur tes data ici
}

http://php.net/manual/fr/pdo.query.php

Soit tu fais un execute soit tu utilise la méthode de @betaweb avec query mais qu'il le dit, tu sais ce que tu tape ou copie / colle ?

barpoi78
Auteur

J'ai donc regardé sur les forums et j'ai vu que prepare permettait de lutter contre les injections SQL alors j'ai fais comme ça:

        $req = $bdd->prepare('SELECT * FROM date_picker WHERE date_picker = :date_picker ORDER BY date_picker DESC LIMIT 10');
        $req->execute(array('date_picker' => $_GET['date_picker']));

ça fonctionne bien si la valeur existe bien dans l'URL mais sans passer par l'URL comment je dois faire car avec query ça fonctionne bien mais si c'est pas sécurisé autant faire du premier coup la bonne méthode. (juste le chevron supérieur qui ne passe pas au dessus > > )

Il ne faut pas mettre ton Get directement en fait :

// pour la version sans paramètre à passer :
$req = $bdd->query('SELECT * FROM date_picker ORDER BY date_picker DESC LIMIT 0, 10');

// Avec des paramètres :
$datePicker = (empty($_GET['date_picker'])) ? 'valeur par défaut' : $_GET['date_picker'];
$req = $bdd->prepare('SELECT * FROM date_picker WHERE date_picker = :date_picker ORDER BY date_picker DESC LIMIT 0, 10');
$req->execute([
    'date_picker' => $datePicker
]);

Cela permet de vérifier un minimum ce que tu reçoit car sinon PHP te mets un notice si la case n'existe pas

barpoi78
Auteur

Merci je comprends bien mieux.