je veux comprendre ces deux requêtes s'il vous plait
<?php
if (is_int($info)) // On veut voir si tel personnage ayant pour id $info existe.
{
return (bool) $this->_db->query('SELECT COUNT(*) FROM personnages WHERE id = '.$info)->fetchColumn();
}
$q = $this->_db->prepare('SELECT COUNT(*) FROM personnages WHERE nom = :nom');
$q->execute([':nom' => $info]);
return (bool) $q->fetchColumn();
?>
A mon avis, ce que j'ai comrpis
le code est écrit en 2 méthodes différentes
1- query fait la requête et l’exécution par contre prépare c'est juste préparer la requete il lui faut un execute()
2- les valeurs des paramètres c'est sécurisés ??? moi j'utilise toujours binValue
3) oui le retour de fetchColumn() sera 1 ou 0 (1 perso ou aucun), et (bool) 1 => VRAI, (bool) 0 => FAUX
2) le code est dans un script, si c'est un script appelé par d'autres script (donc en "interne" et pas directement depuis l'url) je peux supposer que le(s) script(s) appelant(s) ont déjà vérifié que la donnée est sûre
Mais tu peux aussi faire "ceinture et bretelles" en mettant toujours le bindValue()
D'ailleurs le cours est mal fait, car execute() retourne un booléen, donc s'ill plante il retourne FALSE, comme le retour n'est pas testé, l'appel de fetchColumn() lève une exception que tu devras trapper (try/catch)
avec une gestion des erreurs PDO::ERRMODE_EXCEPTION (avec le mode émulé) par exemple, le execute (sinon c'est le prepare) lui lancera une exception (erreur de syntaxe par exemple) donc le fetchColumn ne sera pas atteint. Maintenant pas sûr que fetchColumn lève une exception
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales