|
Publicité ' | ||||||||||||||||||||||||
|
|
#41 | ||||||||||||
![]() ![]() Inscription : septembre 2010 Messages : 7 958 ![]() |
Citation:
Citation:
__________________
http://blog.stealth35.com/ |
||||||||||||
|
|
00
|
|
|
#42 | |||
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 323 ![]() |
Citation:
Code sql :
|
|||
|
|
00
|
|
|
#43 |
![]() ![]() Inscription : septembre 2010 Messages : 7 958 ![]() |
tu dois retraiter quand même, et faire un explode pour avoir ton tableau sachant que tu perds le nom de tes colonnes
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#44 |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 323 ![]() |
On a rien sans rien ^^
par contre on fait qu'une seule requête |
|
|
00
|
|
|
#45 |
![]() ![]() Inscription : septembre 2010 Messages : 7 958 ![]() |
tu fais qu'un requêtes pour la solution 2 et 3, faut aussi trouver un séparateur qui ne sois pas dans les resultats aussi
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#46 |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 323 ![]() |
je parle pour le cas de figure enoncé, j'ai encore jamais vu de virgule dans le nom ou le prénom
Mais c'est vrai que PDO::FETCH_GROUP est plus clean, reste à voir le temps de traitement sur grosses volumétries |
|
|
00
|
|
|
#47 | ||||
![]() ![]() Inscription : septembre 2010 Messages : 7 958 ![]() |
si tu veux un petit exemple simplifié avec FETCH_CLASS
Code :
on peu le faire direct aussi, mais la ca marche qu'avec setFetchMode Code :
__________________
http://blog.stealth35.com/ |
||||
|
|
00
|
|
|
#48 |
|
Membre Expert
![]() Inscription : juin 2007 Messages : 2 323 ![]() |
Merci l'ami, c'est simple et facilement compréhensible
|
|
|
00
|
|
|
#49 | ||
![]() ![]() Inscription : septembre 2010 Messages : 7 958 ![]() |
un autre exemple avec FETCH_CLASSTYPE, qui lui va prendre le nom de la premier colonne pour créer l'objet a la classe du même nom. (en rajoutant la colonne rôle, qui est sois admin sois guest
Code :
__________________
http://blog.stealth35.com/ |
||
|
|
00
|
|
|
#50 | ||||
|
Membre expérimenté
![]() ![]() Inscription : mars 2005 Messages : 649 ![]() |
RunCodePHP m'a fait remarqué une importante erreur dans l'article. En effet, à plusieurs endroits (les joies du copier coller) j'avais ceci:
Code :
J'ai donc corrigé les exemples en question afin qu'il soient tel que: Code :
Voilà, désolé pour cette erreur, et encore merci à RunCodePHP |
||||
|
|
00
|
|
|
#51 | |
|
Membre Expert
![]() ![]() Christele RubneauInscription : novembre 2009 Messages : 1 057 ![]() |
Citation:
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); chez les rares qui demandent le renvoie des exeptions. lors de la connection. Alors encore plus rare sont ceux qui craient un TRY pour les requétes Bien sur l'attribut est acquis a $bdd quand au retour d'exeptions, mais encore faut'il un CATCH qui les reçoivent. Et la c'est le floux absolu, deux écoles : mettre les requétes dans le TRY de connection, donc un seul CATCH Ou un TRY par requéte |
|
|
|
00
|
|
|
#52 |
|
Membre expérimenté
![]() ![]() Inscription : mars 2005 Messages : 649 ![]() |
Maurisier:
Normalement les gens se font des gestionnaire de connection et d'erreur afin de centraliser la gestion des erreurs. Par exemple, sur les gros projets, les erreurs de requêtes seront forcément traitées (loggué quelque part). Ainsi, on se doute bien que les développeurs ne copie-collent pas le code d'ouverture et d'écriture dans un fichier à chaque fois qu'ils ont une requête. L'avantage de l'orienté objet est que les classes PDO peuvent être étendues. De plus, si une exception n'est pas capturée, elle est transmise à la fonction parent. Une erreur fatale d'uncatched exception arrivera uniquement si au terme de la récursion il n'y a pas eu de capture. En somme, pour tracer une image grossière, si tu as un index.php comme front-controlleur unique, il te suffirait de créer un gros try-catch et l'ensemble de ce qui est chargé par ce fichier (c'est à dire tout ton code) sera capturé. |
|
|
10
|
|
|
#53 |
|
Membre Expert
![]() ![]() Christele RubneauInscription : novembre 2009 Messages : 1 057 ![]() |
FMaz:
Oui j'entends bien, mais il reste désagréable d'incruster dans un seul TRY tout un code ... et perdu a la fin du php le Catch ... Ton exemple a ce sujet est trop sommaire. Tu vas te retrouver avec des includes etc ... pffff en plus c'est pas beau a lire. |
|
|
01
|
|
|
#54 |
|
Membre expérimenté
![]() ![]() Inscription : mars 2005 Messages : 649 ![]() |
Heu ?? Je suis pas certain de comprendre ce que tu essaie d'exprimer. D'ailleurs de quel "exemple" parle-tu exactement ?
En ce qui me concerne, c'est un article sur PDO, pas sur la gestion des exceptions, et encore moins sur la façon de gérer ses inclusions de fichiers. De plus si tu regarde les exemples du manuel PHP, tu verra qu'ils placent la connexion dans un try catch aussi, car la connexion n'utilise que les exceptions. Après si tu ne veux pas utiliser les exceptions, tu n'es pas obligé. Mais on est en 2010 avec PHP 5 (pour ne pas dire 5.3), alors je ne vais pas recommander de gérer ses erreurs en PHP 4... mais je n'ai rien contre ca, et l'article indique bien comment ne pas utiliser les exceptions. |
|
|
10
|
|
|
#55 |
|
Membre Expert
![]() ![]() Christele RubneauInscription : novembre 2009 Messages : 1 057 ![]() |
FMaz:
Bien sur bien sur je comprends tout cela Je parlais de récupérer les exeption sur les requétes PDO elles mêmes, bien sur pas sur du PHP Mais c'est bon n'en parlons plus.
|
|
|
01
|
|
|
#56 |
|
Membre expérimenté
![]() ![]() Inscription : mars 2005 Messages : 649 ![]() |
Oui, je parlais de ca aussi.
Tu dois mettre en place un mécanisme de gestion des exceptions. Si c'est bien fait, c'est transparent. Dans mon cas j'ai un connexion manager qui instancie une classe étendue de PDO, qui elle est en lien avec un error manager. De cette facon, j'instancie ma connexion, puis la gestion des erreurs et des statistiques est prises en charge en arrière plan sans que ca soit visible. Mais c'est hors du spectre de l'article, j'en ai donc pas parlé... pour le moment. |
|
|
10
|
|
|
#57 |
|
Membre régulier
![]() Inscription : avril 2003 Messages : 360 ![]() |
Que faut-il faire alors pour s'assurer que la requête est protégée ?
|
|
|
00
|
|
|
#58 | |
![]() ![]() Inscription : septembre 2010 Messages : 7 958 ![]() |
Citation:
__________________
http://blog.stealth35.com/ |
|
|
|
00
|
|
|
#59 |
|
Membre chevronné
![]() Inscription : juin 2004 Messages : 770 ![]() |
Je pense que ce qu'il veut dire, c'est que requête préparée n'est pas synonyme de protection contre les injections. Encore faut-il savoir les utiliser.
Je te renvoie vers un de tes posts ou tu expliques à quelqu'un comment les utiliser : http://www.developpez.net/forums/d10...e/#post5747039 a mon avis la remarque de FMaz vise à ne pas mettre de fausses certitudes dans l'esprit des débutants notamment.
__________________
|
|
10
|
|
|
#60 |
|
Membre expérimenté
![]() ![]() Inscription : mars 2005 Messages : 649 ![]() |
Exactement.
L'article à été écris pour être une base d'apprentissage saine à PDO. J'ai donc essayé de casser certains "mythes". Par la suite, la lecture d'article plus poussée devrait être facilité. Quoi qu'il en soit, de ce que je sais, et sous toute réserve, l'utilisation d'une requête préparée et le passage des variables par les fonctions BIND est une protection suffisante concernant --seulement-- l'injection SQL. Par contre, ca ne garanti pas la sécurité de la donnée pour les autres failles. Par exemple si le champs du nom d'utilisateur permet de stocker du code javascript, il est possible que ca permette d'exploiter d'autres failles qui ne sont pas spécifiquement liées à la base de données. |
|
|
10
|
Copyright © 2000-2013 - www.developpez.com