Remplacement des fonctions mysql_* par des PDO et des instructions préparées
Le problème :
Traditionnellement, Les développeurs PHP ont utilisé les fonctions mysql_* pour la connectivité des bases de données et la manipulation des données. Cependant, ces fonctions sont considérées comme non sécurisées et vulnérables à diverses attaques.
PDO et déclarations préparées :
PDO (PHP Data Objects) est une interface standardisée pour l'interaction avec la base de données, offrant une sécurité et une flexibilité accrues. Les instructions préparées, une fonctionnalité de PDO, permettent des requêtes paramétrées, qui empêchent efficacement les attaques par injection SQL.
Avantages de l'utilisation de PDO et des instructions préparées :
Connexion à la base de données avec PDO :
$host = 'host'; $user = 'user'; $pass = 'password'; $database = 'database'; try { $dbh = new PDO("mysql:host=$host;dbname=$database", $user, $pass); } catch (PDOException $e) { echo "Unable to connect: " . $e->getMessage(); exit; }
Préparer et exécuter une requête avec des instructions préparées :
Pour récupérer un utilisateur par ID à l'aide d'instructions préparées :
$user_id = $_GET['id']; $stmt = $dbh->prepare("SELECT * FROM `users` WHERE `id` = :user_id"); $stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT); $stmt->execute(); $result = $stmt->fetchAll();
De même, pour insérer des données avec des instructions préparées :
$username = $_POST['username']; $email = $_POST['email']; $stmt = $dbh->prepare("INSERT INTO `users` (username, email) VALUES (?, ?)"); $stmt->bindParam(1, $username, PDO::PARAM_STR); $stmt->bindParam(2, $email, PDO::PARAM_STR); $stmt->execute();
Considérations de sécurité :
Les instructions préparées offrent une sécurité inhérente contre l'injection SQL en séparant données issues de requêtes. Cependant, il est crucial de gérer correctement les données d'entrée pour éviter d'autres vulnérabilités telles que les scripts intersites (XSS) ou la falsification de requêtes intersites (CSRF).
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!