現在の位置: ホーム> 最新記事一覧> pdostatement :: getColumnmeta関数を介してデータベース列名とデータ型を正確に取得する方法は?

pdostatement :: getColumnmeta関数を介してデータベース列名とデータ型を正確に取得する方法は?

gitbox 2025-07-10
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// コードのこの部分は、記事の内容とは何の関係もありません,分離前にコンテンツを表示するためにのみ使用されます</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"この記事を読んでください,この記事では詳細に説明します PDOStatement::getColumnMeta 機能の使用。"</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">/*
 * 合格する方法 PDOStatement::getColumnMeta データベース列名とデータ型を正確に取得する機能?
 *
 * 使用中 PHP の PDO データベース操作を拡張するとき,获取查询结果の元数据非常重要,特に動的に生成されたテーブル構造で、データをエクスポートまたは検証するとき。
 * PDOStatement::getColumnMeta はい PDO 提供の1つ个方法,用于获取结果集中指定列の元信息,列名を取得するのに役立ちます、データ型およびその他の情報。
 *
 * 1つ、関数の紹介
 * PDOStatement::getColumnMeta(int $column) :
 *   - パラメーター $column はい列の索引(から0始める)。
 *   - 返回值はい1つ个关联数组,包含该列の元数据,列名として(name)、データ型(native_type)、長さ(len)、はい否允许 NULL(flags)待って。
 *
 * 二、使用の例
 * 以下はです MySQL 例として,演示合格する方法 PDOStatement::getColumnMeta 列名を取得しますそしてデータ型。
 */</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">"テーブルフィールド情報:\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">// 列名を取得します</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">'不明な列名'</span></span><span>;
        </span><span><span class="hljs-comment">// 获取数据库原生データ型</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">'不明なタイプ'</span></span><span>;
        </span><span><span class="hljs-comment">// 有些数据库返回の字段長さ信息</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">'未知長さ'</span></span><span>;

        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"列インデックス <span class="hljs-subst">{$i}</span></span></span><span>: 名前 = </span><span><span class="hljs-subst">{$columnName}</span></span><span>, タイプ = </span><span><span class="hljs-subst">{$nativeType}</span></span><span>, 長さ = </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">"データベースエラー: "</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">/*
 * 三つ、注意すべきこと
 * 1. 不同数据库驱动返回の元数据字段可能有所不同,実際の状況に従って処理する必要があります。
 * 2. getColumnMeta 仅对已经执行の查询有效,また、一部のドライバーはこの機能を完全にサポートしていません。
 * 3. native_type はい数据库驱动返回の原生タイプ,そして PHP タイプ不完全对应,変換する必要がある場合は、自分でマッピングしてください。
 *
 * 4、要約します
 * 合格 PDOStatement::getColumnMeta,可以方便地获取查询结果の列名そしてデータ型,增强程序の动态处理能力。
 * 組み合わせた columnCount 方法,すべてのフィールド情報を通過できます,实现更灵活の数据库操作。
 */</span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>