PHPでは、 mysqli_stmt :: result_metadataは、準備されたステートメントに対応する結果セットのメタデータ(つまり、フィールド構造)を取得するために一般的に使用される方法です。この方法は、クエリの結果のために列情報を動的に生成し、バインディングコラムなどのさらなる操作を実行するのに非常に役立ちます。次に、 mysqli_stmt :: result_metadataを使用して結果セット構造を取得する方法を示す完全なコード例を示します。
まず、 mysqliを介してデータベースに接続する必要があります。既にMySQLデータベースを持っているとします。ここに接続の基本コードがあります。
<?php
$host = 'localhost';
$username = 'root';
$password = 'password';
$dbname = 'test_database';
// 接続を作成します
$conn = new mysqli($host, $username, $password, $dbname);
// 接続が成功しているかどうかを確認してください
if ($conn->connect_error) {
die("接続に失敗しました: " . $conn->connect_error);
}
?>
構造には、 ID 、名前、電子メールの3つのフィールドが含まれているテーブルユーザーがあり、これらのフィールドのメタデータを取得する必要があるとします。最初にクエリステートメントを準備します。
$sql = "SELECT id, name, email FROM users";
$stmt = $conn->prepare($sql);
if ($stmt === false) {
die('MySQL prepare failed: ' . $conn->error);
}
mysqli_stmt :: result_metadataメソッドを使用して、結果セットのメタデータを取得します。このメソッドは、クエリ結果のフィールド情報を含むmysqli_resultオブジェクトを返します。次に、フィールド情報を繰り返し、各フィールドの名前を出力します。
$result_metadata = $stmt->result_metadata();
if ($result_metadata === false) {
die('結果セットメタデータを取得できません');
}
$columns = [];
while ($column = $result_metadata->fetch_field()) {
$columns[] = $column->name;
}
echo "クエリ結果のフィールド名:<br>";
foreach ($columns as $column_name) {
echo $column_name . "<br>";
}
フィールドのメタデータを取得した後、 mysqli_stmt :: bind_resultメソッドを使用して、結果の各列をPHP変数に結合できます。列をバインドして結果を取得する方法の例は次のとおりです。
// バインド列
$stmt->bind_result($id, $name, $email);
// クエリを実行します
$stmt->execute();
// 結果を取得します
while ($stmt->fetch()) {
echo "ID: $id, Name: $name, Email: $email <br>";
}
// 緊密な声明
$stmt->close();
上記の部分を一緒にする完全なコード例を次に示します。
<?php
$host = 'localhost';
$username = 'root';
$password = 'password';
$dbname = 'test_database';
// 接続を作成します
$conn = new mysqli($host, $username, $password, $dbname);
// 接続が成功しているかどうかを確認してください
if ($conn->connect_error) {
die("接続に失敗しました: " . $conn->connect_error);
}
$sql = "SELECT id, name, email FROM users";
$stmt = $conn->prepare($sql);
if ($stmt === false) {
die('MySQL prepare failed: ' . $conn->error);
}
// 結果を取得します集元数据
$result_metadata = $stmt->result_metadata();
if ($result_metadata === false) {
die('結果セットメタデータを取得できません');
}
$columns = [];
while ($column = $result_metadata->fetch_field()) {
$columns[] = $column->name;
}
echo "クエリ結果のフィールド名:<br>";
foreach ($columns as $column_name) {
echo $column_name . "<br>";
}
// バインド列
$stmt->bind_result($id, $name, $email);
// クエリを実行します
$stmt->execute();
// 結果を取得します
while ($stmt->fetch()) {
echo "ID: $id, Name: $name, Email: $email <br>";
}
// 緊密な声明
$stmt->close();
// 接続を閉じます
$conn->close();
?>
mysqli_stmt :: result_metadataを使用して、準備されたステートメントクエリの結果セット構造を簡単に取得します。フィールド情報を取得した後、必要に応じて列を動的にバインドしてクエリの結果を抽出できます。これは、複雑なクエリを扱い、動的ページを生成する場合に非常に便利です。