Maison > Article > base de données > L'échappement des données est-il toujours nécessaire lors de l'utilisation de PDO et d'instructions préparées ?
Remplacement des fonctions mysql_* par des PDO et des instructions préparées
Question :
Lors de l'utilisation de mysql_ * fonctions, est-il toujours nécessaire d'utiliser mysql_real_escape_string pour échapper des données avant de faire des requêtes ? Si oui, comment cela fonctionne-t-il avec PDO et les instructions préparées ?
Réponse :
S'échapper avec mysql_real_escape_string
mysql_real_escape_string escapes caractères spéciaux dans la saisie utilisateur pour empêcher les attaques par injection SQL. Cependant, il se limite aux chaînes d'échappement et ne peut pas gérer d'autres types de données. Il nécessite également une connexion MySQL active, ce qui n'est pas nécessaire lors de l'utilisation de PDO.
PDO et instructions préparées
PDO (PHP Data Objects) fournit une interface cohérente avec divers pilotes de base de données, y compris MySQL. Les instructions préparées sont une fonctionnalité essentielle de PDO qui vous permet d'exécuter en toute sécurité des requêtes de base de données en remplaçant les espaces réservés dynamiques par des valeurs prédéfinies.
Lors de l'utilisation d'instructions préparées, la requête SQL est préparée à l'avance et seules les valeurs dynamiques sont fournies. au moment de l'exécution. Cela garantit que la requête est analysée et validée par le serveur de base de données, la rendant ainsi insensible aux attaques par injection SQL.
Liaison des paramètres avec PDO
Pour lier les paramètres dans PDO, vous utilisez la méthode bindParam(). Le premier paramètre est le nom de l'espace réservé, qui peut être soit un espace réservé nommé (par exemple, :username) soit un espace réservé en point d'interrogation (?):
``php
$stmt->bindParam(' :username', $username, PDO::PARAM_STR);
``
Pour les chaînes, vous pouvez spécifier la longueur de l'espace réservé en utilisant le type PDO::PARAM_STR_CHAR(length). Ceci est utile lors de l'insertion de données dans des champs avec des limitations de taille spécifiques :
``php
$stmt->bindParam(':username', $username, PDO::PARAM_STR_CHAR(25));
``
Gestion sécurisée des données
En utilisant PDO et les instructions préparées, vous n'avez pas besoin d'échapper manuellement aux entrées de l'utilisateur. Les valeurs d'espace réservé sont liées de manière sécurisée à la requête et exécutées par le serveur de base de données. Cela fournit un mécanisme de sécurité plus robuste et plus complet que l'utilisation de mysql_real_escape_string seul.
Exemple de requête d'insertion avec PDO
``php
$stmt = $dbh-> ;prepare('INSERT INTO users (username, email) VALUES (:username, :email)');
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':email', $email, PDO::PARAM_STR);
$stmt->execute();
``
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!