En PHP, MySQLI fournit une variété de façons de faire fonctionner les bases de données MySQL, où les instructions préparées peuvent effectivement empêcher l'injection de SQL. MySQLI :: STMT_INIT et BIND_PARAM sont deux fonctions couramment utilisées lors de la mise en œuvre d'instructions de prétraitement. Cet article présentera comment utiliser ces deux fonctions correctement pour la liaison des paramètres.
MySQLI :: STMT_INIT est une méthode de la classe MySQLI qui est utilisée pour initialiser une instruction de prétraitement vide. Cette méthode n'exécute pas la requête SQL, elle prépare simplement un objet d'instruction.
La méthode Bind_param est utilisée pour lier les paramètres réels dans une instruction de prétraitement. Lors de l'exécution de requêtes SQL, ces paramètres liés remplacent les espaces réservés dans l'instruction SQL.
Le processus de base de l'utilisation de mysqli :: stmt_init et bind_param en php est le suivant:
Connectez-vous à la base de données : d'abord, vous devez vous connecter à la base de données via la classe MySQLI .
Créez une instruction de prétraitement : créez un objet d'instruction de prétraitement via STMT_INIT .
Paramètres de liaison : utilisez la méthode bind_param pour lier la valeur d'entrée de l'utilisateur à l'espace réservé dans l'instruction de prétraitement.
Instruction d'exécution : exécutez la requête SQL avec de bons paramètres liés.
Résultats du traitement : obtenez les résultats de la requête et effectuez des opérations.
Voici un exemple simple de code qui montre comment utiliser MySQLI :: STMT_INIT et BIND_PARAM pour la liaison des paramètres.
<?php
// 1. Créer une connexion de base de données
$mysqli = new mysqli("localhost", "user", "password", "database");
// Vérifiez si la connexion réussit
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// 2. Créer une déclaration de prétraitement
$stmt = $mysqli->stmt_init();
if ($stmt === false) {
die("Échec de l'instruction d'initialisation a échoué");
}
// 3. Préparer SQL Requête
$sql = "SELECT name, email FROM users WHERE age = ? AND status = ?";
// 4. Lier les paramètres
if ($stmt->prepare($sql)) {
// 假设我们要Requête年龄为 30 Et le statut est 'active' Utilisateurs
$age = 30;
$status = 'active';
// utiliser bind_param Lier les paramètres
// 'i' Indique un type entier,'s' Représente le type de chaîne
$stmt->bind_param('is', $age, $status);
// 5. 执行Requête
$stmt->execute();
// 6. 获取Requête结果
$result = $stmt->get_result();
// 输出Requête结果
while ($row = $result->fetch_assoc()) {
echo "Name: " . $row['name'] . " - Email: " . $row['email'] . "<br>";
}
// 7. Déclaration étroite
$stmt->close();
}
// 8. Fermez la connexion de la base de données
$mysqli->close();
?>
Connectez-vous à la base de données : premièrement, créez une connexion de base de données via un nouveau MySQLI et effectuez une gestion des erreurs.
Créez une instruction de prétraitement : Initialisez l'objet d'instruction de prétraitement via $ mysqli-> stmt_init () . Si false est renvoyé, cela signifie que l'initialisation a échoué.
Préparer la requête SQL : préparer la requête SQL via la méthode de préparation , où ? est un espace réservé, en attendant la liaison via bind_param .
Paramètres de liaison : la méthode bind_param reçoit deux paramètres:
Le premier paramètre est une chaîne de type, qui spécifie le type de chaque paramètre. Par exemple: «I» représente le type entier, «S» représente le type de chaîne, et «D» représente le numéro de point flottant à double précision.
Les deuxième paramètres et suivants sont les variables réelles à lier à la requête SQL.
Exécuter la requête : utilisez la méthode EXECUTE pour exécuter des instructions de prétraitement et la requête SQL réelle sera envoyée à la base de données.
Obtenez les résultats de la requête : obtenez le résultat exécuté via get_result , et vous pouvez utiliser fetch_assoc pour obtenir chaque ligne de données.
Closez les instructions et les connexions : Enfin, après l'exécution de la requête, fermez les instructions et les connexions de la base de données.
Dans le développement réel, les paramètres liés à Bind_param peuvent être de nombreux types, y compris les entiers, les chaînes, les nombres de points flottants, etc. Les types courants sont décrits comme suit:
I : Type entier (int).
D : Type de point flottant double précision (double).
S : Type de chaîne (chaîne).
B : type blob (données binaires).
Au besoin, Bind_param lie les paramètres aux requêtes SQL en fonction de ces types.
L'ordre des lieux doit être conforme à l'ordre des paramètres liés : l'ordre des espaces réservés dans la requête SQL doit être cohérent avec l'ordre des paramètres liés.
Vérifiez les erreurs : lorsque vous utilisez des méthodes telles que STMT_INIT , Préparez et Bind_param , il est recommandé de toujours vérifier la valeur de retour pour éviter les erreurs potentielles.
Protection par injection SQL : L'utilisation d'instructions de prétraitement et de paramètres de liaison est un moyen efficace pour empêcher l'injection de SQL.
En utilisant les fonctions MySQLI :: STMT_INIT et BIND_PARAM , les développeurs peuvent facilement prévenir l'injection SQL et assurer la sécurité et la stabilité des opérations de base de données. Le processus de paramètres de liaison est simple et efficace, particulièrement adapté aux requêtes qui doivent traiter la saisie des utilisateurs.
J'espère que l'explication de cet article peut vous aider à mieux comprendre comment utiliser ces deux fonctions pour des opérations de base de données sûres en PHP.