Maison >base de données >tutoriel mysql >Comment remplacer les fonctions `mysql_*` obsolètes par des PDO et des instructions préparées pour des interactions sécurisées avec la base de données ?

Comment remplacer les fonctions `mysql_*` obsolètes par des PDO et des instructions préparées pour des interactions sécurisées avec la base de données ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-06 13:42:02364parcourir

How to Replace Outdated `mysql_*` Functions with PDO and Prepared Statements for Secure Database Interactions?

Remplacement des fonctions mysql_* par des PDO et des instructions préparées

Question :

Comment puis-je remplacer les fonctions mysql_* obsolètes par PDO et instructions préparées pour stocker et récupérer en toute sécurité des données d'une base de données ?

Réponse :

  1. Établir une connexion PDO :
$hostname = '*host*';
$username = '*user*';
$password = '*pass*';
$database = '*database*';

$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
  1. Utiliser des instructions préparées pour insérer des donné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();
  1. Paramètre de longueur pour BindParam :

Le paramètre de longueur n'est pas requis pour PDO::PARAM_STR. Cependant, si vous avez une limite maximale de caractères pour le champ dans votre table de base de données, vous pouvez la spécifier après PDO::PARAM_STR comme indiqué ci-dessous :

$stmt->bindParam(1, $username, PDO::PARAM_STR, 255);
  1. Déclarations préparées pour la récupération des données :
$user_id = $_GET['id'];

$stmt = $dbh->prepare("SELECT * FROM `users` WHERE `id` = ?");

$stmt->bindParam(1, $user_id, PDO::PARAM_INT);
  1. Utilisation de bindParam pour différents types de données :
  • PDO::PARAM_STR pour les chaînes
  • PDO::PARAM_INT pour les entiers
  • PDO::PARAM_BOOL pour les booléens
  1. 安全性:
  • Les instructions préparées éliminent le besoin d'échappement manuel des chaînes avec des fonctions telles que mysql_real_escape_string.
  • PDO gère l'exécution des requêtes en toute sécurité, empêchant les vulnérabilités d'injection SQL.
  • Cependant, il est important de noter que les déclarations préparées à elles seules ne garantissent pas la sécurité. La validation des entrées et des mesures de désinfection appropriées doivent toujours être mises en œuvre.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn