PDO: prepare & quote

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : PDO: prepare & quote

par Xenon_54 » 05 janv. 2008, 00:25

La doc indique déjà tous les bienfaits des requêtes préparées.

Si notre ami pouvait la lire, il en resortirait grandement instruit. :)

par Victor BRITO » 04 janv. 2008, 18:33

Un autre avantage d'une requête préparée (et donc de la méthode prepare ()), en plus de l'échappement automatique des caractères spéciaux sensibles (les ', ", \ et autres --), est que la requête préparée peut être réutilisée autant de fois qu'on veut (pour une nouvelle insertion, mise à jour ou suppression de même nature) sans qu'on ait à la réécrire.
$pdo = new PDO ('mysql:host=localhost;dbname=base', 'root', '');
$sql = "INSERT INTO table (colonne1, colonne2) VALUES (:colonne1, :colonne2)";
$requete = $pdo -> prepare ($sql);

$colonne1 = 'Rasmus';
$colonne2 = 'Lerdorf';

$requete -> bindParam (':colonne1', $colonne1);
$requete -> bindParam (':colonne2', $colonne2);

$requete -> execute ();

// Nouvelle insertion

$colonne1 = 'Andi';
$colonne2 = 'Gutmans';

$requete -> execute ();

// Nouvelle insertion

$colonne1 = 'Zeev';
$colonne2 = 'Suraski';

$requete -> execute ();
On peut aussi passer les paramètres au moyen d'un tableau, comme suit :
$pdo = new PDO ('mysql:host=localhost;dbname=base', 'root', '');
$sql = "INSERT INTO table (colonne1, colonne2) VALUES (:colonne1, :colonne2)";
$requete = $pdo -> prepare ($sql);

$colonne1 = 'Rasmus';
$colonne2 = 'Lerdorf';

$requete -> execute (array (
  ':colonne1' => $colonne1,
  ':colonne2' => $colonne2
));

par Xenon_54 » 03 janv. 2008, 22:06

prepare() te permet de préparer ta requête SQL avec des paramètres.

Tu peux ensuite assigner des variables et définir le type de ceux-ci. La requête préparée se chargera de sécurisé les variables en questions selon leur type. (string, integer, etc.)

Regarde la documentation de cette fonction pour comprendre ce que ça implique:
http://www.php.net/manual/fr/function.P ... dParam.php

Également:
http://www.php.net/manual/fr/ref.pdo.php
Requêtes préparées et procédures stockées

par v4gab0nd » 03 janv. 2008, 20:30

J'avais lu cette article à l'instant! :)

Je ne comprend pas très bien ce qu'il dise par "construire des requêtes SQL". Je n'arrive pas a différencier quote() et prepare().

D'après ce que j'ai compris quote() est un genre de addslashes(). Il évite les mauvaises compréhension de SQL dans la requete.
Et prepare() que fait-il pour la sécurité ?

par Xenon_54 » 03 janv. 2008, 20:21

Les explications sont données dans la documentation:
http://www.php.net/manual/fr/function.PDO-quote.php
Si vous utilisez cette fonction pour construire des requêtes SQL, vous êtes vivement invité à utiliser PDO->prepare() pour préparer les requêtes SQL avec des paramètres liées au lieu d'utiliser PDO->quote() pour interpréter les entrées utilisateurs dans la requête SQL. Les requêtes préparées avec des paramètres liées ne sont pas seulement plus portables, plus maléables et plus sécurisées 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 drivers PDO n'implémentent pas cette méthode (comme PDO_ODBC). Utilisez les requêtes préparées à la place.
As-tu des questions après avoir lu ces informations?

PDO: prepare & quote

par v4gab0nd » 03 janv. 2008, 20:05

Bonjour,
Je suis en train de faire un site avec la classe PDO. J'ai une question concernant la sécurité.
Je souhaite dans l'une de mes classes interroge la base de donnée pour savoir si ma requete SQL renverra quelque chose (Ma fonction renverra TRUE ou FALSE). Cependant l'utilisateur peut intervenir dans la requete. (Injection SQL...)

Sur php.net, il déconseille quote() pour la sécurité mais je ne comprend pas vraiment pourquoi.
Je ne comprend pas bien la différence et lequel des deux est le plus interessant ?

prepare() ou quote() ?

Merci d'avance.

J'ai une autre petite question. J'en profite de la mettre ici. Est ce que PDO est activé sur tous ou la plupart des hebergeur PHP5 ?