PHPでは、拡張機能を使用してデータベースを操作する場合、クエリ結果自体を取得するだけでなく、フィールド名、タイプ、長さなどのクエリの返されたフィールドの詳細を理解する必要がある場合があります。この情報はフィールドのメタデータと呼ばれます。
この記事では、特定の例を使用して、 mysqli :: stmt_initを使用してprepare()とresult_metadata()メソッドを組み合わせて、データベースフィールドのメタデータを取得する方法を説明します。
まず、 MySQLIクラスを使用してデータベースに接続する必要があります。
<?php
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
if ($mysqli->connect_errno) {
die('接続に失敗しました: ' . $mysqli->connect_error);
}
?>
次に、 stmt_init()を使用してmysqli_stmtオブジェクトを初期化し、 prepare()メソッドを使用してSQLクエリステートメントを準備します。
<?php
$stmt = $mysqli->stmt_init();
if (!$stmt->prepare('SELECT id, name, email FROM users WHERE status = ?')) {
die('前処理に失敗しました: ' . $stmt->error);
}
?>
Status = 'Active'でユーザーを照会したいとします。
<?php
$status = 'active';
$stmt->bind_param('s', $status);
if (!$stmt->execute()) {
die('実行に失敗しました: ' . $stmt->error);
}
?>
次に、ポイントはここにあります - result_metadata()メソッドを呼び出して、クエリ結果のフィールドメタデータを取得します。
<?php
$metadata = $stmt->result_metadata();
if ($metadata) {
while ($field = $metadata->fetch_field()) {
echo "フィールド名: " . $field->name . "<br>";
echo "フィールドタイプ: " . $field->type . "<br>";
echo "最大長: " . $field->max_length . "<br>";
echo "<hr>";
}
$metadata->free();
} else {
echo "メタデータはありません。";
}
?>
ここで、 fetch_field()はフィールドの詳細を含むオブジェクトを返し、一般的な属性には以下が含まれます。
名前→フィールド名
タイプ→フィールドタイプ(数値コード、マニュアルを比較する必要があります)
max_length →フィールドの最大長(注:結果セットにのみ有効)
最後に、ステートメントをリリースし、データベース接続を閉じることを忘れないでください。
<?php
$stmt->close();
$mysqli->close();
?>
クエリが3つのフィールドID 、名前、および電子メールを返すと仮定すると、出力は次のとおりです。
フィールド名: id
フィールドタイプ: 3
最大長: 0
-----------------------
フィールド名: name
フィールドタイプ: 253
最大長: 0
-----------------------
フィールド名: email
フィールドタイプ: 253
最大長: 0
フィールドタイプの数値は、 mysql_type_longを表す3など、mysqlマニュアルのタイプ定数を参照する必要があることに注意してください。253はmysql_type_var_stringを表します。