Position actuelle: Accueil> Derniers articles> Comment obtenir avec précision le nom de la colonne de la base de données et le type de données via la fonction PDOSTATION :: GetColumnMeta?

Comment obtenir avec précision le nom de la colonne de la base de données et le type de données via la fonction PDOSTATION :: GetColumnMeta?

gitbox 2025-07-10
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Cette partie du code n&#39;a rien à voir avec le contenu de l&#39;article,Utilisé uniquement pour afficher le contenu avant la séparation</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Bienvenue à lire cet article,Cet article expliquera en détail PDOStatement::getColumnMeta Utilisation des fonctions。"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
<span class="hljs-comment">/*
 * Comment passer PDOStatement::getColumnMeta Fonctions pour obtenir avec précision les noms de colonnes de base de données et les types de données?
 *
 * Utilisé PHP de PDO Lors de l&#39;extension de l&#39;opération de base de données,获取查询结果de元数据非常重要,Surtout dans la génération de structures de table à génération dynamique、Lors de l&#39;exportation ou de la vérification des données。
 * PDOStatement::getColumnMeta Oui PDO 提供deun个méthode,用于获取结果集中指定列de元信息,Aidez-nous à obtenir des noms de colonne、Type de données et autres informations。
 *
 * un、Fonction Introduction
 * PDOStatement::getColumnMeta(int $column) :
 *   - paramètre $column Oui列de索引(depuis0commencer)。
 *   - 返回值Ouiun个关联数组,包含该列de元数据,Comme nom de colonne(name)、Type de données(native_type)、longueur(len)、Oui否允许 NULL(flags)attendez。
 *
 * deux、Exemple d&#39;utilisation
 * Ci-dessous est MySQL Par exemple,演示Comment passer PDOStatement::getColumnMeta Obtenez le nom de la colonneetType de données。
 */</span>

</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-variable">$dsn</span></span><span> = </span><span><span class="hljs-string">"mysql:host=localhost;dbname=testdb;charset=utf8mb4"</span></span><span>;
    </span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">"root"</span></span><span>;
    </span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">""</span></span><span>;
    </span><span><span class="hljs-variable">$options</span></span><span> = [
        PDO::</span><span><span class="hljs-variable constant_">ATTR_ERRMODE</span></span><span> =&gt; PDO::</span><span><span class="hljs-variable constant_">ERRMODE_EXCEPTION</span></span><span>,
    ];

    </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-variable">$dsn</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$options</span></span><span>);

    </span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT id, username, email, created_at FROM users LIMIT 1"</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-variable">$sql</span></span><span>);

    </span><span><span class="hljs-variable">$columnCount</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">columnCount</span></span><span>();

    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Informations sur le champ de table:\n"</span></span><span>;
    </span><span><span class="hljs-keyword">for</span></span><span> (</span><span><span class="hljs-variable">$i</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-variable">$i</span></span><span> &lt; </span><span><span class="hljs-variable">$columnCount</span></span><span>; </span><span><span class="hljs-variable">$i</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-variable">$i</span></span><span>);
        </span><span><span class="hljs-comment">// Obtenez le nom de la colonne</span></span><span>
        </span><span><span class="hljs-variable">$columnName</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">'Nom de la colonne inconnue'</span></span><span>;
        </span><span><span class="hljs-comment">// 获取数据库原生Type de données</span></span><span>
        </span><span><span class="hljs-variable">$nativeType</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">'Type inconnu'</span></span><span>;
        </span><span><span class="hljs-comment">// 有些数据库返回de字段longueur信息</span></span><span>
        </span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-variable">$meta</span></span><span>[</span><span><span class="hljs-string">'len'</span></span><span>] ?? </span><span><span class="hljs-string">'未知longueur'</span></span><span>;

        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Index de colonne <span class="hljs-subst">{$i}</span></span></span><span>: nom = </span><span><span class="hljs-subst">{$columnName}</span></span><span>, taper = </span><span><span class="hljs-subst">{$nativeType}</span></span><span>, longueur = </span><span><span class="hljs-subst">{$length}</span></span><span>\n";
    }

} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Erreur de base de données: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}

<span class="hljs-comment">/*
 * trois、Choses à noter
 * 1. 不同数据库驱动返回de元数据字段可能有所不同,Besoin d&#39;être géré en fonction de la situation réelle。
 * 2. getColumnMeta 仅对已经执行de查询有效,Et certains conducteurs ne soutiennent pas pleinement cette fonction。
 * 3. native_type Oui数据库驱动返回de原生taper,et PHP taper不完全对应,Si vous avez besoin de vous convertir, veuillez le cartographier vous-même。
 *
 * Quatre、Résumer
 * passer PDOStatement::getColumnMeta,可以方便地获取查询结果de列名etType de données,增强程序de动态处理能力。
 * Combiné columnCount méthode,Toutes les informations sur le terrain peuvent être traversées,实现更灵活de数据库操作。
 */</span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>