Position actuelle: Accueil> Derniers articles> Quelle est la différence entre mysql_fetch_field et mysql_fetch_assoc? Vous apprendre à sélectionner les fonctions en fonction de vos besoins

Quelle est la différence entre mysql_fetch_field et mysql_fetch_assoc? Vous apprendre à sélectionner les fonctions en fonction de vos besoins

gitbox 2025-08-26

1. Différence de concept (résumé en une phrase)

  • mysql_fetch_assoc () : (le nom de la clé est le nom du champ, et la valeur est la valeur du champ correspondant de la ligne). Il est souvent utilisé pour traverser chaque rangée de données dans le résultat de la requête.

  • MySQL_Fetch_field () : Obtenez le champ (colonne) Meta Information (tel que le nom de champ, le type, la longueur, etc.) de l'ensemble de résultats , et est utilisé pour obtenir des informations de structure de colonne, plutôt que des données de ligne.


2. Comparaison des utilisations typiques

  • mysql_fetch_assoc () est utilisé pour lire les lignes de données renvoyées par la requête, comme afficher la liste d'utilisateurs et traiter chaque enregistrement.

  • mysql_fetch_field () est utilisé pour lire les définitions de champ des ensembles de résultats de requête, par exemple lors de la génération de têtes de table dynamiquement, de la génération automatique de formulaires et de la vérification des types ou des longueurs de colonnes.


3. Exemple (extension MySQL , illustrer le but - démonstration uniquement, notez qu'il est obsolète)

 <span><span><span class="hljs-comment">// Supposons qu&#39;il y a déjà $link = mysql_connect(...); mysql_select_db(...);</span></span><span>

</span><span><span class="hljs-comment">// Données de requête</span></span><span>
</span><span><span class="hljs-variable">$res</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, username, email FROM users"</span></span><span>);

</span><span><span class="hljs-comment">// utiliser mysql_fetch_assoc() Itérer à travers chaque ligne</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$res</span></span><span>)) {
    </span><span><span class="hljs-comment">// $row C&#39;est un tableau associatif: ['id' =&gt; '1', 'username' =&gt; 'alice', 'email' =&gt; '[email protected]']</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ID: <span class="hljs-subst">{$row['id']}</span></span></span><span>, nom d&#39;utilisateur: </span><span><span class="hljs-subst">{$row['username']}</span></span><span>\n";
}

</span><span><span class="hljs-comment">// Obtenir des informations sur le terrain(Par exemple2Informations sur la colonne)</span></span><span>
</span><span><span class="hljs-title function_ invoke__">mysql_data_seek</span></span><span>(</span><span><span class="hljs-variable">$res</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>); </span><span><span class="hljs-comment">// Facultatif:Pointeur de positionnement(mysql_fetch_field Ne changez pas le pointeur de ligne,但与utiliser习惯有关)</span></span><span>
</span><span><span class="hljs-variable">$field</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysql_fetch_field</span></span><span>(</span><span><span class="hljs-variable">$res</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>); </span><span><span class="hljs-comment">// paramètre 1 Indique le 2 Liste(Index de 0 commencer)</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$field</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"1 et 12Liste名: <span class="hljs-subst">{$field-&gt;name}</span></span></span><span>, taper: </span><span><span class="hljs-subst">{$field-&gt;type}</span></span><span>, longueur: </span><span><span class="hljs-subst">{$field-&gt;max_length}</span></span><span>\n";
}
</span></span>

illustrer:

  • mysql_fetch_assoc () renvoie un tableau pour accéder aux données de ligne.

  • mysql_fetch_field () renvoie un objet (ou false ) contenant les informations méta de la colonne (nom, orgname, max_length, type, etc.).


4. Malets communs communs

  • J'ai pensé à tort que MySQL_Fetch_field () renvoie la valeur du champ d'une certaine ligne - non , il renvoie la structure / méta-informations du champ . Pour obtenir la valeur, veuillez utiliser mysql_fetch_assoc () / mysql_fetch_row () , etc.

  • On pense que mysql_fetch_assoc () peut obtenir le type ou la longueur d'un champ - non , il fournit uniquement la valeur (et le nom du champ en tant que clés).


5. Choisissez une suggestion (quand utiliser laquelle)

  • Vous souhaitez itérer les résultats de la requête et traiter les données : utilisez mysql_fetch_assoc () (ou plus moderne mysqli_fetch_assoc () / PDO's fetch (PDO :: fetch_assoc) ).

  • Vous souhaitez générer dynamiquement des en-têtes de table, vérifier les types de colonnes ou lire les noms / longueurs de colonnes et autres informations Meta : utilisez mysql_fetch_field () (ou mysqli_fetch_field_direct () , $ result-> fetch_field () , PDO GetColumnMeta () (note Compatibilité et limitation)).

  • Si l'objectif est de prendre en compte la sécurité, les performances et la maintenance à long terme, veuillez migrer vers MySQLI ou PDO dès que possible . L'extension MySQL a été supprimée dans PHP 7+.


6. Alternatives modernes recommandées (exemple MySQLI vs PDO )

mysqli (orienté vers le processus)

 <span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_connect</span></span><span>(</span><span><span class="hljs-string">'host'</span></span><span>,</span><span><span class="hljs-string">'user'</span></span><span>,</span><span><span class="hljs-string">'pass'</span></span><span>,</span><span><span class="hljs-string">'db'</span></span><span>);
</span><span><span class="hljs-variable">$res</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_query</span></span><span>(</span><span><span class="hljs-variable">$mysqli</span></span><span>, </span><span><span class="hljs-string">"SELECT id, username, email FROM users"</span></span><span>);

</span><span><span class="hljs-comment">// Obtenir des données de ligne(Tableau associatif)</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$res</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'username'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
}

</span><span><span class="hljs-comment">// Obtenir des informations sur le terrain(1 et 1 1 Liste)</span></span><span>
</span><span><span class="hljs-variable">$fieldInfo</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_fetch_field_direct</span></span><span>(</span><span><span class="hljs-variable">$res</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>); </span><span><span class="hljs-comment">// ou mysqli_fetch_field($res) Lors de la traversée des champs</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$fieldInfo</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$fieldInfo</span></span><span>-&gt;name . </span><span><span class="hljs-string">' / '</span></span><span> . </span><span><span class="hljs-variable">$fieldInfo</span></span><span>-&gt;type . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>

PDO

 <span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=host;dbname=db;charset=utf8mb4'</span></span><span>, </span><span><span class="hljs-string">'user'</span></span><span>, </span><span><span class="hljs-string">'pass'</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, username, email FROM users"</span></span><span>);

</span><span><span class="hljs-comment">// Obtenir des données de ligne</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">fetch</span></span><span>(PDO::</span><span><span class="hljs-variable constant_">FETCH_ASSOC</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'email'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
}

</span><span><span class="hljs-comment">// Obtenir des informations sur l&#39;élément de terrain(Avis:PDO::getColumnMeta Dans certains pilotes/Version instable)</span></span><span>
</span><span><span class="hljs-variable">$meta</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getColumnMeta</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>); </span><span><span class="hljs-comment">// 1 et 1 2 Liste</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$meta</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$meta</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">', native_type='</span></span><span> . (</span><span><span class="hljs-variable">$meta</span></span><span>[</span><span><span class="hljs-string">'native_type'</span></span><span>] ?? </span><span><span class="hljs-string">'unknown'</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>

7. Résumé (revue rapide)

  • mysql_fetch_assoc () : données de retour des données de ligne (Array d'association) - Le choix préféré pour les enregistrements de lecture quotidiens.

  • mysql_fetch_field () : retour des informations sur l'élément de colonne (objet) - Utilisé pour lire des informations structurelles telles que le nom de la colonne, le type et la longueur.

  • Dans le développement réel, MySQLI ou PDO doit être utilisé, et les fonctions de substitut correspondantes telles que fetch_assoc () / fetch_field () / getColumnMeta () doivent être utilisées pour effectuer la même tâche.


8. Conseils supplémentaires

  • Essayez d'utiliser des requêtes paramétrées (instructions de prétraitement) pour empêcher l'injection SQL ( préparer / bind_param pour MySQLI , ou préparer / bindvalue pour PDO).

  • Si vous avez juste besoin d'une liste de noms de colonnes, un moyen simple consiste à prendre le tableau associatif de la première ligne et à utiliser array_keys () pour obtenir le nom du champ (notez que le traitement supplémentaire est requis lorsque le jeu de résultats est vide).