Lorsque vous utilisez PHP pour faire fonctionner les bases de données MySQL, l'extension MySQLI fournit des instructions de prétraitement riches (instructions préparées), qui peuvent effectivement empêcher les attaques d'injection SQL et améliorer la sécurité et l'efficacité des opérations de base de données. Cet article se concentrera sur la façon d'initialiser un objet d'instruction à l'aide de la méthode MySQLI :: STMT_INIT et exécuter des instructions SQL via l'objet.
mysqli :: stmt_init () est une méthode de la classe mysqli , utilisée pour initialiser un objet de déclaration vide ( mysqli_stmt ). Cet objet peut être lié aux instructions de requête SQL en appelant la méthode prépare () et en outre appelée bind_param () , exécuter () et d'autres méthodes de fonctionnement.
La syntaxe de base est la suivante:
$stmt = $mysqli->stmt_init();
où $ mysqli est un objet mysqli qui a été connecté à la base de données.
Voici un exemple PHP complet à l'aide de l'instruction d'initialisation STMT_INIT et exécutant des requêtes SQL:
<?php
// Connexion de base de données
$mysqli = new mysqli("localhost", "username", "password", "database");
// Vérifiez la connexion
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// Initialiser l'objet de l'instruction
$stmt = $mysqli->stmt_init();
// Prétraitement SQL Déclaration
if ($stmt->prepare("SELECT name, email FROM users WHERE id = ?")) {
// Lier les paramètres
$id = 1;
$stmt->bind_param("i", $id);
// 执行Déclaration
$stmt->execute();
// Variables de résultat de liaison
$stmt->bind_result($name, $email);
// Obtenez les résultats de la requête
while ($stmt->fetch()) {
echo "Nom d'utilisateur: $name, Mail: $email<br>";
}
// 关闭Déclaration
$stmt->close();
} else {
echo "SQL Prétraitement失败: " . $stmt->error;
}
// Fermer la connexion
$mysqli->close();
?>
Après avoir appelé STMT_INIT () , vous devez utiliser la méthode Pread () pour lier réellement l'instruction SQL.
Les paramètres de type dans bind_param (), par exemple, "i" représente un entier, et "s" représente une chaîne, doit être réglé correctement.
Assurez-vous d'appeler $ stmt-> clôture () après avoir utilisé l'objet instruction pour libérer la ressource.
Bien que vous puissiez utiliser directement $ mysqli-> préparé () pour la préparation de la déclaration, STMT_INIT () fournit un contrôle plus détaillé, comme plus utile lorsque vous devez vérifier si l'instruction est réutilisable ou utiliser une interface de bas niveau.