Dans le développement de PHP, la connexion de la base de données est un lien de base et critique. Une classe de connexion de base de données efficace et sécurisée peut non seulement simplifier le processus de développement, mais également empêcher efficacement les risques de sécurité tels que l'injection SQL. Cet article présentera comment encapsuler une fonction Secure Connect () et implémenter une méthode de connexion de la base de données qui empêche l'injection SQL.
Bien qu'il soit pratique d'utiliser directement MySQLI_Connect () ou PDO pour se connecter à la base de données, s'il manque d'encapsulation, le code est facile à répéter et difficile à maintenir. Grâce à l'encapsulation orientée objet, il peut être mis en œuvre:
Gestion unifiée de la configuration de la connexion de la base de données
Améliorer la réutilisabilité du code
Gérer de manière centralisée les exceptions et les erreurs
Empêcher l'injection SQL avec des déclarations de prétraitement
Il est recommandé d'utiliser PDO (PHP Data Objectts) comme interface de connexion de la base de données dans PHP, pour des raisons:
Prend en charge plusieurs bases de données et possède une portabilité du code élevé
Instructions de prétraitement intégrées pour empêcher l'injection SQL
Mécanisme de manipulation des exceptions parfaites
<?php
class Database {
private $host = 'localhost';
private $dbname = 'testdb';
private $username = 'root';
private $password = 'password';
private $pdo;
private $error;
// Constructeur,Initialiser la connexion
public function __construct() {
$dsn = "mysql:host={$this->host};dbname={$this->dbname};charset=utf8mb4";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // faire une exception
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Tableau associatif par défaut
PDO::ATTR_EMULATE_PREPARES => false, // Désactiver le prétraitement de la simulation,En utilisant le prétraitement natif
];
try {
$this->pdo = new PDO($dsn, $this->username, $this->password, $options);
} catch (PDOException $e) {
$this->error = $e->getMessage();
// Erreurs de journalisation ou de traitement
die("La connexion de la base de données a échoué: " . $this->error);
}
}
// Exécution unifiée de la requête(SELECT)
public function query($sql, $params = []) {
$stmt = $this->pdo->prepare($sql);
$stmt->execute($params);
return $stmt->fetchAll();
}
// Exécution unifiée de l'addition, de la suppression et de la modification(INSERT/UPDATE/DELETE)
public function execute($sql, $params = []) {
$stmt = $this->pdo->prepare($sql);
return $stmt->execute($params);
}
// Obtenez le dernier insertID
public function lastInsertId() {
return $this->pdo->lastInsertId();
}
}
?>
<?php
$db = new Database();
// Exemple de requête de sécurité:prévenir SQL injection
$userId = 123;
$result = $db->query("SELECT * FROM users WHERE id = :id", ['id' => $userId]);
// Exemple d'insert sûr
$name = 'Zhang San';
$email = 'zhangsan@m66.net';
$insertSql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$db->execute($insertSql, ['name' => $name, 'email' => $email]);
?>
À l'aide des instructions de prétraitement PDO, les instructions SQL sont séparées des données et la saisie de l'utilisateur n'est pas directement épissée en chaînes SQL
La liaison des paramètres permet au pilote de base de données de gérer automatiquement l'évasion des caractères spéciaux
Désactiver le prétraitement simulé et améliorer la sécurité avec le prétraitement natif
Encapsulant une classe de connexion de la base de données avec une fonction connect () , la sélection de l'OPD comme connexion sous-jacente, et la combinaison des instructions de prétraitement est une solution efficace et sécurisée pour empêcher l'injection SQL dans PHP. La conception de cette classe est simple et facile à évoluer, et peut répondre à la plupart des besoins commerciaux, et est une pratique recommandée pour le développement de PHP moderne.