En PHP, la fonction sérialisée est utilisée pour convertir une structure de données PHP (comme un objet ou un tableau) en une chaîne qui peut être stockée ou transférée. La fonction non sérialisée convertit cette chaîne à la structure de données d'origine. Avec ces deux fonctions, nous pouvons facilement stocker des objets PHP dans la base de données et les récupérer si nécessaire.
Dans cet article, nous explorerons comment utiliser le sérialisation et la non-série pour réaliser l'accès et la récupération des objets de base de données dans PHP, en particulier lors du traitement des objets de base de données. Avec un exemple simple, nous pouvons comprendre comment sérialiser un objet et le stocker dans une base de données, puis comment récupérer l'objet à partir de la base de données.
Supposons que nous ayons une classe utilisateur qui représente un objet utilisateur et que nous voulons enregistrer l'objet utilisateur dans la base de données. Avant d'enregistrer, nous devons sérialiser l'objet en une chaîne.
class User {
public $name;
public $email;
public function __construct($name, $email) {
$this->name = $name;
$this->email = $email;
}
public function __toString() {
return "Name: $this->name, Email: $this->email";
}
}
Ensuite, nous créerons une connexion de base de données et enregistrerons l'objet utilisateur sérialisé dans la base de données.
// Connexion de base de données(Assumer l'utilisation MySQL)
$mysqli = new mysqli("localhost", "username", "password", "database_name");
// 检查Connexion de base de données
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
// Créer un User Objet
$user = new User("Alice", "alice@example.com");
// 将Objet序列化
$serializedUser = serialize($user);
// 将序列化的Objet存入数据库
$stmt = $mysqli->prepare("INSERT INTO users (user_data) VALUES (?)");
$stmt->bind_param("s", $serializedUser);
$stmt->execute();
echo "User saved successfully!";
Dans ce code, nous convertissons l'objet utilisateur en une chaîne qui peut être stockée via la fonction Serialize et l'insertons dans la base de données. Dans les bases de données réelles, le champ User_Data sera généralement un champ de type texte ou de type blob pour stocker les données sérialisées.
Lorsque nous devons récupérer des objets stockés dans la base de données, nous pouvons repousser la chaîne sérialisée à l'objet via la fonction non sérialisée .
// 查询数据库获取序列化的Objet
$result = $mysqli->query("SELECT user_data FROM users WHERE id = 1");
if ($row = $result->fetch_assoc()) {
// Obtenez la chaîne sérialisée
$serializedUser = $row['user_data'];
// 将序列化的字符串恢复为Objet
$user = unserialize($serializedUser);
// 输出恢复后的Objet
echo "Recovered User: " . $user;
}
Ici, nous restaurons la chaîne sérialisée tirée de la base de données vers l'objet utilisateur d'origine via la fonction non sérialisée . Après cela, nous pouvons accéder à ses propriétés et méthodes, tout comme nous opérons sur des objets normaux.
Sécurité: des soins extrêmes doivent être pris en charge lors de l'utilisation de non-série , en particulier lors de la désérialisation des données de l'entrée de l'utilisateur ou des sources non fiables. Un utilisateur malveillant peut exécuter un code dangereux en construisant des chaînes spéciales sérialisées. Pour éviter cela, vous pouvez utiliser le deuxième paramètre de non-série pour limiter les classes désérialisées, par exemple:
$user = unserialize($serializedUser, ["allowed_classes" => ["User"]]);
Performance: la sérialisation et la désérialisation des objets peuvent affecter les performances, en particulier lorsque les objets sont grands ou fréquemment opérés. Lors de la conception d'un modèle de base de données, compte tenu du coût de stockage et de restauration des objets, vous pouvez choisir la méthode de stockage appropriée.
Versioning: Si la structure de la classe change (par exemple, l'ajout ou la suppression des propriétés), les données sérialisées d'origine peuvent ne pas être restaurées correctement. Pour gérer cela, le contrôle de version peut être utilisé ou des vérifications de compatibilité peuvent être effectuées pendant la désérialisation.
Grâce à des fonctions sérialisées et non désérialisées , PHP fournit un moyen pratique de stocker et de restaurer des objets. Cette méthode est particulièrement efficace lors du traitement des objets de base de données. Cependant, dans une utilisation réelle, il est nécessaire de prêter attention aux problèmes de sécurité et de performances pour assurer la stabilité et la fiabilité du système. Avec les exemples et techniques ci-dessus, vous devriez être en mesure d'implémenter facilement l'accès et la récupération des objets dans votre base de données.