TD3 – Compléments Requête préparée

Requêtes préparées

Les requêtes classiques

Schéma d’une requête normale :

  1. envoi de la requête par le client MySQL vers le serveur MySQL
  2. compilation de la requête
  3. plan d’exécution par le serveur
  4. exécution de la requête
  5. 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 :

  1. envoi de la requête à préparer
  2. compilation de la requête
  3. plan d’exécution par le serveur
  4. stockage de la requête compilée en mémoire
  5. retour d’un identifiant de requête au client

Phase 2 :

  1. le client MySQL demande l’exécution de la requête avec l’identifiant
  2. exécution
  3. 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 :