Les instructions préparées sont très utiles pour empêcher l'injection MySQL.
Les instructions préparées sont utilisées pour exécuter plus efficacement plusieurs instructions SQL identiques.
Les instructions préparées fonctionnent comme suit :
Prétraitement : créez des modèles d'instructions SQL et envoyez-les à la base de données. Les valeurs réservées sont marquées du paramètre "?". Par exemple:
INSÉRER DANS MyGuests (prénom, nom, email) VALEURS (?, ?, ?)
Analyse de base de données, compilation, optimisation des requêtes sur des modèles d'instructions SQL et stockage des résultats sans sortie.
Exécution : Enfin, la valeur liée à l'application est transmise au paramètre (marque (?") et la base de données exécute l'instruction. L'application peut exécuter l'instruction plusieurs fois si les valeurs des paramètres sont différentes.
Par rapport à l'exécution directe d'instructions SQL, les instructions préparées présentent deux avantages principaux :
Les instructions préparées réduisent considérablement le temps d'analyse, car une seule requête est effectuée (bien que l'instruction soit exécutée plusieurs fois).
Les paramètres de liaison réduisent la bande passante du serveur, il vous suffit d'envoyer les paramètres de la requête au lieu de l'intégralité de l'instruction.
Les instructions préparées sont très utiles pour l'injection SQL car différents protocoles sont utilisés après l'envoi des valeurs des paramètres, garantissant la validité des données.
L'exemple suivant utilise des instructions préparées dans MySQLi et lie les paramètres correspondants :
Analysez chaque ligne de code pour l'exemple suivant :
"INSÉRER DANS LES VALEURS MyGuests (prénom, nom, e-mail) (?, ?, ?)"Dans l'instruction SQL, nous utilisons le point d'interrogation (?), ici nous pouvons remplacer le point d'interrogation par un entier, une chaîne, une virgule flottante double précision et une valeur booléenne.
Jetons ensuite un coup d'œil à la fonction bind_param() :
$stmt->bind_param("sss", $firstname, $lastname, $email);Cette fonction lie les paramètres SQL et indique à la base de données la valeur des paramètres. La colonne de paramètres "sss" gère les types de données des paramètres restants. Le caractère s indique à la base de données que le paramètre est une chaîne.
Il existe quatre types de paramètres :
i - entier (type entier)
d - double (type à virgule flottante double précision)
s - chaîne
b - BLOB (grand objet binaire : grand objet binaire)
Chaque paramètre nécessite un type spécifié.
En indiquant à la base de données le type de données du paramètre, vous pouvez réduire le risque d'injection SQL.
Remarque : Si vous souhaitez insérer d'autres données (saisie utilisateur), la validation des données est très importante. |
Dans l'exemple suivant, nous utilisons des instructions préparées et des paramètres de liaison dans PDO :