Dans PHP, les opérations de la base de données sont une partie indispensable du travail quotidien des développeurs. Pour améliorer l'efficacité et prévenir les attaques d'injection SQL, l'utilisation de déclarations préparées étendues par MySQLI est une approche hautement recommandée. Cet article introduira en détail le processus d'utilisation de Mysqli fetch_fields , prépare et bind_result en php.
Tout d'abord, nous devons créer une connexion de base de données. Ensuite, nous pouvons utiliser la méthode de préparation pour préparer une instruction SQL. Cette méthode accepte une requête SQL en tant que paramètre et renvoie un objet de déclaration préparé.
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
$query = "SELECT id, name, email FROM users WHERE active = ?";
$stmt = $mysqli->prepare($query);
Dans le code ci-dessus, la méthode de préparation prépare l'instruction SQL et se prépare à la liaison des paramètres ultérieurs.
Ensuite, nous devons lier les paramètres. La méthode bind_param peut lier la valeur du paramètre réel à l'instruction SQL. Dans cet exemple, la requête filtre les données via des champs actifs , nous devons donc lier à la place un paramètre ?.
$active = 1;
$stmt->bind_param("i", $active); // "i"Indique un type entier
Le premier paramètre de la méthode bind_param est une chaîne représentant les types de chaque paramètre dans l'instruction SQL. Les types courants sont:
I : entier
D : Points flottants à double précision
s : chaîne
B : Données de type blob
Dans cet exemple, nous lions un paramètre de type entier ( $ actif ).
Après avoir lié les paramètres, nous pouvons exécuter l'instruction SQL via la méthode Execute :
$stmt->execute();
À l'heure actuelle, la requête SQL sera exécutée, mais les données n'ont pas encore été renvoyées. Nous devons obtenir la structure du résultat de la requête via fetch_fields et lier la valeur de chaque colonne via bind_result .
La méthode fetch_fields peut obtenir des informations sur le terrain du résultat de la requête, y compris le nom de la colonne, le type, etc. Il renvoie un tableau d'objets de champ qui peuvent être utilisés pour le traitement des résultats ultérieurs.
$fields = $stmt->fetch_fields();
foreach ($fields as $field) {
echo "Nom de champ: " . $field->name . "<br>";
echo "Type de terrain: " . $field->type . "<br>";
}
Le code ci-dessus sortira le nom et le type de chaque champ. L'objet de champ renvoyé par la méthode fetch_fields contient des métadonnées riches, qui facilitent les développeurs pour obtenir les informations de structure de la table de base de données.
Après avoir exécuté la requête, vous devez lier la colonne du résultat de la requête à la variable PHP via la méthode bind_result . La méthode bind_result vous permet d'extraire chaque ligne de données dans le résultat défini en passant des variables.
$stmt->bind_result($id, $name, $email);
Ici, nous lions respectivement les champs ID , nom et e-mail dans le résultat de la requête aux variables $ id , $ nom et $ e-mail respectivement.
Après avoir lié la variable de résultat, nous pouvons utiliser la méthode Fetch pour extraire la ligne de résultats de requête par ligne.
while ($stmt->fetch()) {
echo "ID: $id, Name: $name, Email: $email<br>";
}
La méthode Fetch renvoie une valeur booléenne indiquant si une ligne de données a été obtenue avec succès. Si l'acquisition est réussie, les données de la ligne actuelle sont accessibles via la variable liée.
Lorsque toutes les opérations sont terminées, n'oubliez pas de fermer les instructions préparées et les connexions de base de données pour libérer les ressources:
$stmt->close();
$mysqli->close();
Intégrez les étapes ci-dessus, le code complet final est le suivant:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
$query = "SELECT id, name, email FROM users WHERE active = ?";
$stmt = $mysqli->prepare($query);
$active = 1;
$stmt->bind_param("i", $active);
$stmt->execute();
$fields = $stmt->fetch_fields();
foreach ($fields as $field) {
echo "Nom de champ: " . $field->name . "<br>";
echo "Type de terrain: " . $field->type . "<br>";
}
$stmt->bind_result($id, $name, $email);
while ($stmt->fetch()) {
echo "ID: $id, Name: $name, Email: $email<br>";
}
$stmt->close();
$mysqli->close();
?>
Étiquettes associées:
fetch_fields