TD3 – Compléments Requête préparée
Requêtes préparées
Les requêtes classiques
Schéma d’une requête normale :
- envoi de la requête par le client MySQL vers le serveur MySQL
- compilation de la requête
- plan d’exécution par le serveur
- exécution de la requête
- résultat du serveur vers le client
Syntaxe PDO
$pdo = new PDO("mysql:host=$host;dbname=$dbname",$login,$pass);
$sql = "SELECT * from voiture";
$rep = $pdo->query($sql);
$tab = $rep->fetch();
La première ligne crée une connexion à la BDD. La deuxième écrit la requête
SQL. La 3ème exécute la requête SQL et met les réponses dans $rep
. Mais $rep
est une représentation interne à PDO des réponses et n’est pas utilisable. La
ligne 4 sert justement à transformer la réponse en un format PHP plus pratique.
Les requêtes préparées
Schémas d’une requête préparée
Phase 1 :
- envoi de la requête à préparer
- compilation de la requête
- plan d’exécution par le serveur
- stockage de la requête compilée en mémoire
- retour d’un identifiant de requête au client
Phase 2 :
- le client MySQL demande l’exécution de la requête avec l’identifiant
- exécution
- résultat du serveur au client
Syntaxe PDO
$pdo = new PDO("mysql:host=$host;dbname=$dbname",$login,$pass);
$sql = "SELECT * from voiture WHERE couleur=:c";
$req_prep = $pdo->prepare($sql);
$req_prep->bindParam(":c","bleu");
$req_prep->execute();
$tab = $req_prep->fetch();
La différence par rapport aux requête non préparées se situe dans les lignes 3 puis 5 & 6. La ligne 3 prépare la requête. Il ne reste plus qu’à lui donner ses paramètres et l’exécuter, ce qui est fait en lignes 5 & 6.
Avantages
Outre cet aspect purement technique, il existe deux autres raisons qui peuvent justifier l’utilisation d’une requête préparée :
- limiter la bande passante utilisée entre le client MySQL et le serveur MySQL : dû au fait que l’échange d’informations est limité au strict minimum.
- éviter les injections SQL : cela concerne la sécurité et évite que les informations rentrées par un client (à travers un formulaire par exemple) soient interprétées.