Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/09/2011, 14h39   #1
Invité de passage
 
Homme Vincent
Inscription : avril 2011
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : Belgique

Informations forums :
Inscription : avril 2011
Messages : 17
Points : 3
Points : 3
Par défaut Première requête PDO

Bonjour à tous,

Je voulais vous soumettre ma première requête PDO, que j'ai codée avec les quelques infos que j'ai prises sur le web.

Je voulais savoir si ca tenais la route, et quelles améliorations je pourrais apporter, notamment d'un point de vue sécurité...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
try
{
	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
	$DB = new PDO('mysql:host=localhost;dbname=stephanebleus', 'root', '', $pdo_options);
}
catch(Exception $e)
{
	die('Erreur : '.$e->getMessage());
}
 
try
{
	// On récupère les données POST
	$titre = $DB->quote($_POST['titre']); 
	$contenu = $DB->quote($_POST['contenu']);
 
	// Insertion dans la base de donnée							
	$req = $DB->exec("INSERT INTO articles(titre, contenu) VALUES ($titre, $contenu)");
 
	// Redirection vers la page d'accueil
	header("Location: index.php");
 
	// Fermeture du curseur
	$req->closeCursor();
}
catch(Exception $e)
{
	die('Erreur : '.$e->getMessage());
}
Merci d'avance
vbaguet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 09h35   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 126
Points : 8 484
Points : 8 484
hello,
c’est pas pas mal même si c'est du copié-collé
change les die en exit, le closeCursor est inutile, et fait une vérification avant de lancer le header, rajoute le charset dans le DSN
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 10h10   #3
Membre confirmé
 
Inscription : juillet 2011
Messages : 146
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juillet 2011
Messages : 146
Points : 253
Points : 253
Personnellement quand même quitte à utiliser PDO, j'utiliserais les requêtes préparées.

http://php.net/manual/fr/pdo.prepared-statements.php
Tolriq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 10h16   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 126
Points : 8 484
Points : 8 484
Citation:
Envoyé par Tolriq Voir le message
Personnellement quand même quitte à utiliser PDO, j'utiliserais les requêtes préparées.

http://php.net/manual/fr/pdo.prepared-statements.php
pourquoi ?
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 10h34   #5
Membre confirmé
 
Inscription : juillet 2011
Messages : 146
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juillet 2011
Messages : 146
Points : 253
Points : 253
Suffit juste de lire le lien que j'ai posté peut être ?

Toujours est il qu'il demande bien comment améliorer le code pour une future réutilisation et augmenter la sécurité.

Le prepare permet d'être sur de ne pas oublier les échappements dans le cas de cet exemple simple.

Et dès qu'il utilisera PDO pour ses select il en verra dans de nombreux cas les avantages en vitesse d’exécution.
Tolriq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 10h45   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 126
Points : 8 484
Points : 8 484
Citation:
Envoyé par Tolriq Voir le message
Suffit juste de lire le lien que j'ai posté peut être ?

Toujours est il qu'il demande bien comment améliorer le code pour une future réutilisation et augmenter la sécurité.

Le prepare permet d'être sur de ne pas oublier les échappements dans le cas de cet exemple simple.

Et dès qu'il utilisera PDO pour ses select il en verra dans de nombreux cas les avantages en vitesse d’exécution.
je sais très bien ce que s'est
mais je doute que toi tu saches vraiment a quoi servent les requêtes préparées, parce que c'est pas du tout à "augmenter la sécurité" et " ne pas oublier les échappements"
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 10h53   #7
Membre confirmé
 
Inscription : juillet 2011
Messages : 146
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juillet 2011
Messages : 146
Points : 253
Points : 253
On pourrais aussi reparler de l'HTML5

Donc prends le temps de lire correctement ce que j'ai écris de voir pourquoi j'ai écris ce que j'ai écris.

Donc
1) les requêtes préparées aident effectivement à la sécurité car l'on travaille avec des données. Il n'est plus possible de faire des injections SQL de 1er niveau avec.

2) Du fait que l'on travaille en mode donnée, il n'est effectivement plus nécessaire de faire des quote ou autre escapes, le moteur PDO s'en charge et ce y compris pour les bases de données ne supportant pas nativement les requêtes préparées.

Je passe sur ma dernière phrase qui reprends un des autre avantages des requêtes préparées.

Donc désolé une fois de plus de ne pas être en accord avec toi mais je sais très bien de quoi je parle ce qui au final n'est peut être pas ton cas.
Tolriq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 11h02   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 126
Points : 8 484
Points : 8 484
faut arrête de survoler les choses, ici une requêtes préparées n'est plus que pas justifiable, une requête préparée sert de template de requêtes, as tu deja fait un requêtee préparée toi même (sans API syle PDO) ? j'en doute, et tu verras qu'il faut aussi échappés tes valeurs, oui l'injection ne se fera mais c'est pas le but de la choses, de plus sous PDO Mysql les requête préparé sont déactivé par défaut, donc niveau optimisation c'est zéro.
donc lit bien la vrai doc de mysql, essaye de faire toi même un requête préparée ensuite on reparle du fait de la justification d'une requêtes préparé dans son cas, et pas juste : "moi j'utilise les requête préparée parce que c'est plus facile".

http://dev.mysql.com/doc/refman/5.0/fr/sqlps.html
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 11h17   #9
Membre confirmé
 
Inscription : juillet 2011
Messages : 146
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juillet 2011
Messages : 146
Points : 253
Points : 253
Alors j'aimerais bien que tu m'expliques ou les requêtes préparée sont désactivée par défaut avec PDO Mysql ça m'intéresse fortement. (Et oui je fait du SQL / PL/SQL sous Sql Server et Oracle aussi).

Pour en revenir au sujet initial, vbaguet demande comment utiliser au mieux PDO il me semble. Les requêtes préparées sont une part très importante de PDO.

D’ailleurs le tuto http://julp.developpez.com/php/pdo/?page=requeter est très complet. Dont je citerais juste :

Citation:
Par requêtes simples, sont entendues des requêtes dont le code est statique. En effet, les requêtes préparées, ayant pour but la prise en compte de "paramètres" de manière simple et sécurisée, seront abordées ci-après.
Je pourrais aussi mettre de nombreux liens expliquant tout un tas de choses techniques mais la question initiale reste quand même comment utiliser PDO au mieux et ma réponse reste tout autant justifiée.
Tolriq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 11h24   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 126
Points : 8 484
Points : 8 484
oui
Citation:
En effet, les requêtes préparées, ayant pour but la prise en compte de "paramètres" de manière simple et sécurisée, seront abordées ci-après.
mais c'est pas la sécurité n'est pas le but d'une requête préparée


pour l'activation des requêtes sous PDO Mysql faut que tu mettes le PDO::ATTR_EMULATE_PREPARES sur false puisque par défaut il est sur true et la t'auras une vrai requête préparée, si tu fais un INSERT multiple (dans un boucle par exemple) t'y gagnera beaucoup niveau performance, c'est le but premier des requêtes préparé

en tout cas ici ce qu'il a fait est très bien une requêtes préparée n'est pas justifiable, puisque c'est pour utilisation bien précise et non pas juste pour faire jolie et tapé le moins de code possible

__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 13h28   #11
Membre chevronné
 
Inscription : juin 2004
Messages : 747
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 747
Points : 741
Points : 741
Utiliser une requête préparée pour faire 1 seul SELECT, c'est un peu comme prendre sa voiture pour aller chercher du pain à 1 km de chez soi, ça fonctionne, mais une voiture sert à faire plus que ça.
Pour faire ce trajet tu choisiras plutôt un vélo, et tu mettras un casque, car effectivement la voiture te protège d'office, pas le vélo.

__________________
  • Mon blog PHP : http://blog.alterphp.com
  • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/09/2011, 07h59   #12
Membre confirmé
 
Inscription : juillet 2011
Messages : 146
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juillet 2011
Messages : 146
Points : 253
Points : 253
Merci pour l'information sur le paramètre par défaut pour Mysql

Ensuite sur le débat de fond je reste sur mes positions pour le moment et je donnerais un dernier exemple de la doc Php :

http://fr2.php.net/manual/fr/pdo.quote.php

Je cite :

Citation:
Si vous utilisez cette fonction pour construire des requêtes SQL, vous êtes vivement invités à utiliser PDO::prepare() pour préparer les requêtes SQL avec des paramètres liés au lieu d'utiliser PDO::quote() pour interpréter les entrées utilisateur dans la requête SQL. Les requêtes préparées avec des paramètres liés sont non seulement plus portables, plus souples et plus sécuritaires, mais bien plus rapides à exécuter que d'interpréter les requêtes, étant donné que les côtés client et serveur peuvent mettre en cache une version compilée de la requête.

Tous les pilotes PDO n'implémentent pas cette méthode (comme PDO_ODBC). Utilisez les requêtes préparées à la place.
Tolriq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 16h29   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 126
Points : 8 484
Points : 8 484
@Tolriq, je comprend bien, mais dans son cas ça ne sert a rien, si il se met en requête préparé, en mode émuler la requête sera la même, en mode normale, il va faire 4 requêtes au lieu d'une seule, donc pas dutout un gain de temps, après niveau compat je d'accord

@vbaguet oublie pas de mettre le charset dans ton DSN, ça affecte aussi quote
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2011, 16h48   #14
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
Bonsoir,
J'étais assez étonnée de lire pareilles énormitées sagissant de PDO, surtout que: PDO::ATTR_EMULATE_PREPARES Active ou désactive la simulation des requêtes préparées. Sur les drivers qui ne n'ont pas le prepare de façon native. Donc cela n'a de valeur que pour les quelques drivers qui n'ont pas "prepare natif" ODBC je crois.

Alors je me suis dit qu ici , tellement abitués toutes et tous a faire du SQL, PDO et prepare était affaire entendue puisque natif sur MYSQL/PDO !

Donc nous pouvons faire un beau prepare, et derriére lancer autant de exec que nous souhaitons, seulement de ce fait , passant par prepare les valeurs s'en trouvent protégées, ce qui n'est pas le cas avec un QUERY PDO simple !

D'ou sans doute ce dialogue de sourds, donc n'en parlons plus, tout le monde avait raison
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/10/2011, 17h37   #15
Modérateur
 
Inscription : septembre 2010
Messages : 7 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 126
Points : 8 484
Points : 8 484
Citation:
Envoyé par christele_r Voir le message
Bonsoir,
J'étais assez étonnée de lire pareilles énormitées sagissant de PDO, surtout que: PDO::ATTR_EMULATE_PREPARES Active ou désactive la simulation des requêtes préparées. Sur les drivers qui ne n'ont pas le prepare de façon native. Donc cela n'a de valeur que pour les quelques drivers qui n'ont pas "prepare natif" ODBC je crois.
testes toi meme, tu verras que sous mysql il emule par defaut ...
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2011, 18h11   #16
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
Citation:
Envoyé par stealth35 Voir le message
testes toi meme, tu verras que sous mysql il emule par defaut ...
Oui bien sur Tous mes sites sont en PDO et prepare est actif de base (cinq serveurs différents et mon local
C' est bien ce que j'ais écris, tout le monde est d'accord
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/10/2011, 18h17   #17
Modérateur
 
Inscription : septembre 2010
Messages : 7 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 126
Points : 8 484
Points : 8 484
tu dis que le mode emulé, n'a pas de valeur pour mysql
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2011, 18h22   #18
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
Citation:
■PDO::ATTR_EMULATE_PREPARES Active ou désactive la simulation des requêtes préparées. Certainspilotes ne supportent pas nativement les requêtes préparées ou en ont un support limité. Ce paramètre force PDO à émuler (TRUE) les requêtes préparées ou (FALSE) à utiliser l'interface native. Il tentera toujours une émulation si le pilote n'a pas de support natif. bool requis.


christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2011, 18h30   #19
Modérateur
 
Inscription : septembre 2010
Messages : 7 126
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 126
Points : 8 484
Points : 8 484
au dela de cite une doc il faut la comprendre, pour mysql le mode emuler est activer par defaut, meme si mysql sait faire des requetes preparees, donc retour a mon commentaire, testes toi meme et tu verras que l'emulation est aussi de la partie pour les pilotes qui prennent en charge les requetes prepares contrairment a ce que tu dis
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2011, 18h39   #20
Membre chevronné
 
Avatar de christele_r
 
Femme Christele
Inscription : novembre 2009
Messages : 661
Détails du profil
Informations personnelles :
Nom : Femme Christele
Âge : 39
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : novembre 2009
Messages : 661
Points : 690
Points : 690
Un moderateur qui porte un jugement sur notre comprehention c' est pas bien !
Je te rappelles juste que tout le sujet parlait de PDO pas de MySql, du reste j'avais vu ton lien sur SQL qui bien sur ne parlait pas du cas PDO.
Enfin tout cela n'est pas grave, c'est toujours bien d'aller au fond des choses.
christele_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h59.


 
 
 
 
Partenaires

Hébergement Web