Dans PHP, MySQLI_STMT :: result_metadata est une méthode couramment utilisée pour obtenir les métadonnées (c'est-à-dire la structure de champ) de l'ensemble de résultats correspondant à une instruction préparée. Cette méthode est très utile pour générer dynamiquement des informations sur les colonnes pour les résultats de requête et effectuer d'autres opérations telles que les colonnes de liaison. Ensuite, je vais afficher un exemple de code complet montrant comment utiliser MySQLI_STMT :: result_metadata pour obtenir la structure du jeu de résultats.
Tout d'abord, nous devons nous connecter à la base de données via MySQLI . Supposons que vous ayez déjà une base de données MySQL, voici le code de base de la connexion:
<?php
$host = 'localhost';
$username = 'root';
$password = 'password';
$dbname = 'test_database';
// Créer une connexion
$conn = new mysqli($host, $username, $password, $dbname);
// Vérifiez si la connexion réussit
if ($conn->connect_error) {
die("Échec de la connexion: " . $conn->connect_error);
}
?>
Supposons que nous ayons des utilisateurs de table dont la structure contient trois champs: ID , nom et e-mail , et nous devons obtenir les métadonnées de ces champs. Préparez d'abord une déclaration de requête:
$sql = "SELECT id, name, email FROM users";
$stmt = $conn->prepare($sql);
if ($stmt === false) {
die('MySQL prepare failed: ' . $conn->error);
}
Nous utilisons la méthode MySQLI_STMT :: Result_metadata pour obtenir les métadonnées de l'ensemble de résultats. Cette méthode renvoie un objet MySQLI_RESULT contenant les informations de champ du résultat de la requête. Ensuite, nous allons itérer les informations sur le terrain et sortir le nom de chaque champ.
$result_metadata = $stmt->result_metadata();
if ($result_metadata === false) {
die('Impossible d'obtenir des métadonnées de jeu de résultats');
}
$columns = [];
while ($column = $result_metadata->fetch_field()) {
$columns[] = $column->name;
}
echo "Le nom de champ du résultat de la requête:<br>";
foreach ($columns as $column_name) {
echo $column_name . "<br>";
}
Après avoir obtenu les métadonnées du champ, vous pouvez utiliser la méthode mysqli_stmt :: bind_result pour lier chaque colonne dans le jeu de résultats sur une variable PHP. Voici un exemple de la façon de lier une colonne et d'obtenir le résultat:
// Colonne de liaison
$stmt->bind_result($id, $name, $email);
// Exécuter une requête
$stmt->execute();
// Obtenir des résultats
while ($stmt->fetch()) {
echo "ID: $id, Name: $name, Email: $email <br>";
}
// Déclaration étroite
$stmt->close();
Voici un exemple de code complet qui rassemble les parties ci-dessus:
<?php
$host = 'localhost';
$username = 'root';
$password = 'password';
$dbname = 'test_database';
// Créer une connexion
$conn = new mysqli($host, $username, $password, $dbname);
// Vérifiez si la connexion réussit
if ($conn->connect_error) {
die("Échec de la connexion: " . $conn->connect_error);
}
$sql = "SELECT id, name, email FROM users";
$stmt = $conn->prepare($sql);
if ($stmt === false) {
die('MySQL prepare failed: ' . $conn->error);
}
// Obtenir des résultats集元数据
$result_metadata = $stmt->result_metadata();
if ($result_metadata === false) {
die('Impossible d'obtenir des métadonnées de jeu de résultats');
}
$columns = [];
while ($column = $result_metadata->fetch_field()) {
$columns[] = $column->name;
}
echo "Le nom de champ du résultat de la requête:<br>";
foreach ($columns as $column_name) {
echo $column_name . "<br>";
}
// Colonne de liaison
$stmt->bind_result($id, $name, $email);
// Exécuter une requête
$stmt->execute();
// Obtenir des résultats
while ($stmt->fetch()) {
echo "ID: $id, Name: $name, Email: $email <br>";
}
// Déclaration étroite
$stmt->close();
// Fermer la connexion
$conn->close();
?>
Utilisez MySQLI_STMT :: result_metadata pour obtenir facilement la structure du jeu de résultats d'une requête de déclaration préparée. Après avoir obtenu des informations sur le champ, vous pouvez lier dynamiquement les colonnes au besoin et extraire les résultats de la requête. Ceci est très utile pour traiter les requêtes complexes et générer des pages dynamiques.