Maison >base de données >tutoriel mysql >Comment empêcher l'injection MySQL avec les instructions préparées PDO : existe-t-il un équivalent PDO à `mysql_real_escape_string()` ?
Équivalent PDO de mysql_real_escape_string()
Dans votre migration de code de mysql_* vers PDO, vous recherchez un équivalent pour mysql_real_escape_string(). Cependant, il est crucial de noter qu'il n'existe pas d'équivalent direct dans PDO.
Techniquement, PDO::quote() existe, mais il n'est pas couramment utilisé et n'est pas comparable à mysql_real_escape_string().
Prévention appropriée des injections MySQL
Lorsque vous utilisez PDO de manière appropriée avec des instructions préparées, vous bénéficiez d'une protection contre les injections MySQL. Les instructions préparées nettoient vos entrées, éliminant le besoin de fonctions telles que mysql_real_escape_string().
Exemple de requête de base de données sécurisée utilisant des instructions préparées
Voici un exemple de base de données sécurisée requête utilisant des instructions préparées par PDO :
$db = new PDO( "mysql:host=localhost;dbname=xxx;charset=utf8", "xxx", "xxx", [ PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ] ); // Prepared statement $stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?"); // Execute statement $stmt->execute(array($_POST['color'])); // Fetch result $cars = $stmt->fetchAll(PDO::FETCH_ASSOC);
Comme vous pouvez le voir, nous n'avons pas échappé ni nettoyé $_POST['color'], mais le code reste sécurisé contre l'injection MySQL grâce à PDO et à la puissance de déclarations préparées.
Notes supplémentaires
Conclusion
L'utilisation d'instructions préparées comme démontré ci-dessus est toujours plus sûre que de recourir aux fonctions mysql_*. Les mécanismes de protection intégrés de PDO offrent une approche plus robuste et plus sécurisée pour empêcher l'injection de MySQL.
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!