que pensez vous de ma requete

Mammouth du PHP | 506 Messages

25 mai 2021, 06:35

bonjour a tous

je suis occupé a sécuriser mon site et donc j essaye de m y retrouver dans les requêtes préparées

qui pourrait corriger mon code
merci

Code : Tout sélectionner

$sql='select count(*) AS nb from commentaire WHERE valider=\'1\''; //j utilise AS nb pour compter le nombre d enregistrement qui sont mis sur valider 1 $datas = NULL; // ------------------------------ // // CETTE PARTIE DU CODE NE CHANGE PAS // try{ $requete = $pdo -> prepare($sql) ; $requete->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } // ------------------------------ // //echo 'dont ' . $nRows . ' commentaires(s) publies. $columns = $requete->fetch(); $nb = !empty($columns) ? $columns['nb'] : 0; echo "Il y a $nb commentaires(s) <br>";

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 mai 2021, 10:53

Hello !

En soit il n'y a pas grand chose à redire, mais voici quelques éléments que tu pourrais optimiser dans ce contexte :

- Si la colonne valider en base est un tinyint ou un int (ou n'importe quel format numérique), il n'est pas nécessaire (et il vaut parfois mieux éviter) de mettre des apostrophes autour de la valeur envoyée quand il s'agit d'un nombre côté base de données :
$sql='select count(*) AS nb from commentaire WHERE valider=1';
Ça revient au même et c'est plus facile à lire et à comprendre ;)

Après pour ma part, j'ai pris l'habitude de mettre les mots clés sql en majuscule. C'est totalement arbitraire et ça n'a pas d'impact sur l'exécution de la requête, mais je trouve ça plus simple à lire (ça n'engage que moi) :
$sql='SELECT COUNT(*) AS nb FROM commentaire WHERE valider=1';
- Enfin, les requêtes de type COUNT() ont une particularité par rapport aux autres SELECT, c'est qu'il y aura toujours un résultat de retourné (à moins d'une erreur technique). Si aucun enregistrement n'est trouvé, elle retourne 0 (mais elle retourne une valeur), sinon elle retourne le nombre d'enregistrements correspondant. Il n'est donc pas nécessaire de vérifier si le résultat existe (contrairement à un SELECT classique qui lui ne retournera rien s'il ne trouve aucun enregistrement), pour pouvoir l'utiliser.
$nb = $columns['nb'];
voire directement
echo "Il y a " . $columns['nb'] . " commentaires(s) <br>";
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 506 Messages

25 mai 2021, 11:28

bonjour Ryle
un grand merci pour la reponse
et le cote pédagogique cela aide vraiment beaucoup

oui en effet c est vrai que tu as raison il faut mieux éviter de mettre des ', mais comme j étais pas sur et que cela venait d un exemple

et en effet aussi il faut mieux mettre les mots clé en majuscule , c est d ailleurs ce que tout le monde préconise , je m en suis rendu compte après

et pour le troisième point c est toujours de la logique ...

je viens de modifier un code en mysqli vers PDO je n ai aucune erreur mais les données ne veulent pas s enregistrer , je dois ouvrir un nouveau poste ??