當前位置: 首頁> 最新文章列表> 有沒有mysqli_stmt::result_metadata獲取結果集結構的完整代碼示例?怎麼寫?

有沒有mysqli_stmt::result_metadata獲取結果集結構的完整代碼示例?怎麼寫?

gitbox 2025-06-08

在PHP中, mysqli_stmt::result_metadata是一種常用的方法,用於獲取一個準備好的語句(prepared statement)對應的結果集的元數據(即字段結構)。這種方法對於動態生成查詢結果的列信息以及進行進一步操作(例如綁定列)非常有用。接下來,我將展示一個完整的代碼示例,說明如何使用mysqli_stmt::result_metadata來獲取結果集結構。

1. 連接到數據庫

首先,我們需要通過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);
}
?>

2. 準備SQL查詢

假設我們有一個表users ,其結構包含id , nameemail三個字段,我們需要獲取這些字段的元數據。首先準備一個查詢語句:

 $sql = "SELECT id, name, email FROM users";
$stmt = $conn->prepare($sql);

if ($stmt === false) {
    die('MySQL prepare failed: ' . $conn->error);
}

3. 獲取結果集元數據

我們使用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>";
}

4. 綁定列

在獲取到字段的元數據後,你可以使用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();

5. 完整示例

以下是完整的代碼示例,將上述部分整合在一起:

 <?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();
?>

6. 總結

使用mysqli_stmt::result_metadata可以輕鬆地獲取一個準備好的語句(prepared statement)查詢的結果集結構,獲取字段信息後,你可以根據需要動態綁定列並提取查詢結果。這在處理複雜的查詢和生成動態頁面時非常有用。