Position actuelle: Accueil> Derniers articles> Comment utiliser mysqli_fetch_assoc et mysqli_result :: fetch_column

Comment utiliser mysqli_fetch_assoc et mysqli_result :: fetch_column

gitbox 2025-05-26

Lors du fonctionnement des bases de données MySQL dans PHP, l'extension MySQLI fournit une variété de méthodes pour obtenir des résultats de requête, parmi lesquels MySQLI_RESULT :: Fetch_Column et MySQLI_Fetch_assoc sont des méthodes couramment utilisées pour lire des données. Mais de nombreux développeurs se demandent si ces deux-là peuvent être utilisés ensemble? Peuvent-ils être combinés pour jouer un rôle plus flexible? Cet article décrira leurs différences et leur utilisation combinée en détail avec des exemples.


1. La différence entre mysqli_result :: fetch_column et mysqli_fetch_assoc

  • mysqli_result :: fetch_column
    Cette méthode est utilisée pour obtenir une seule valeur d'une colonne spécifiée à partir de l'ensemble de résultats et renvoyer une seule données pour cette colonne. Il est généralement utilisé pour enregistrer la mémoire et la complexité du code lorsque vous n'avez besoin que de la valeur d'une certaine colonne.

  • mysqli_fetch_assoc
    Cette fonction renvoie une ligne de données dans l'ensemble de résultats et est présentée sous la forme d'un tableau associatif. Le nom de clé du tableau est le nom de champ, qui est pratique pour obtenir plusieurs colonnes de données.

Autrement dit, Fetch_Column obtient une seule colonne de données, tandis que Fetch_assoc obtient un tableau associatif de données dans toute la ligne.


2. Peut-il être utilisé en combinaison?

D'un point de vue technique, MySQLI_RESULT :: Fetch_Column est une méthode de la classe MySQLI_RESULT , tandis que MySQLI_FETCH_ASSOC est une fonction axée sur le processus, et elles appartiennent essentiellement à deux styles de fonctionnement différents.

  • Si vous utilisez un style orienté objet:
    Des méthodes telles que $ result-> fetch_assoc () et $ result-> fetch_column () doivent être utilisées uniformément.

  • Si vous utilisez un style axé sur le processus:
    MySQLI_FETCH_ASSOC ($ Result) doit être utilisé et le style de procédure n'a pas de fonction correspondante Fetch_Column .

Par conséquent, ils ne peuvent pas être appelés alternativement directement sur le même ensemble de résultats , sinon cela entraînera la confusion du curseur de données.


3. Explication pratique des exemples d'utilisation de la combinaison

Supposons que nous interrogeons les utilisateurs de la table d'utilisateurs dans la base de données, avec ID de champs, nom et e-mail , et démontrez deux méthodes pour obtenir des données.

 <?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");

// Vérifiez la connexion
if ($mysqli->connect_error) {
    die("Échec de la connexion: " . $mysqli->connect_error);
}

$sql = "SELECT id, name, email FROM users";
$result = $mysqli->query($sql);

if ($result) {
    // utiliserfetch_assocObtenez chaque rangée de données
    while ($row = $result->fetch_assoc()) {
        echo "ID: " . $row['id'] . ",Nom: " . $row['name'] . ",Mail: " . $row['email'] . "<br>";
    }
    $result->free();
}

// Exécuter à nouveau la requête
$result2 = $mysqli->query($sql);

if ($result2) {
    // utiliserfetch_columnObtenez la première colonne(id)
    while (($id = $result2->fetch_column(0)) !== null) {
        echo "utilisateurID: " . $id . "<br>";
    }
    $result2->free();
}

$mysqli->close();
?>

Dans l'exemple ci-dessus, nous avons effectué deux requêtes pour utiliser respectivement fetch_assoc et fetch_column . Cela évite le problème de la confusion dans le curseur de l'ensemble de résultat.


4. Utilisation recommandée des deux

Si vous souhaitez utiliser fetch_assoc pour obtenir d'abord les données complètes, puis utilisez Fetch_Column pour obtenir une colonne, il est recommandé de mettre en cache le résultat au tableau puis de faire fonctionner le tableau:

 <?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");

$sql = "SELECT id, name, email FROM users";
$result = $mysqli->query($sql);

$rows = [];
if ($result) {
    while ($row = $result->fetch_assoc()) {
        $rows[] = $row;
    }
    $result->free();
}

// Obtenez une colonne de données du cache
$userIds = array_column($rows, 'id');

foreach ($userIds as $id) {
    echo "utilisateurID: $id<br>";
}

$mysqli->close();
?>

Ceci est à la fois efficace et pratique, évitant les requêtes en double et les problèmes de curseur.


5. Résumé

  • mysqli_result :: fetch_column et mysqli_fetch_assoc appartiennent à différents styles de fonctionnement et ne peuvent pas être utilisés directement.

  • Si vous souhaitez utiliser les deux, il est recommandé d'exécuter la requête séparément, ou d'utiliser fetch_assoc pour l'obtenir, puis d'utiliser des fonctions intégrées PHP pour extraire les colonnes spécifiées.

  • Lorsque vous l'utilisez en combinaison, faites attention à l'état du curseur de définition des résultats pour éviter la confusion dans la lecture des données.

En combinant raisonnablement ces deux méthodes, vous pouvez vous rendre plus flexible et efficace lors du traitement des données de base de données.