當前位置: 首頁> 最新文章列表> 如何通過mysqli::stmt_init 函數獲取數據庫字段的元數據(metadata)?

如何通過mysqli::stmt_init 函數獲取數據庫字段的元數據(metadata)?

M66 2025-07-18

在PHP 中,當我們使用擴展操作數據庫時,有時候不僅需要獲取查詢結果本身,還需要了解查詢返回字段的詳細信息,例如字段名稱、類型、長度等。這些信息被稱為字段的元數據(metadata)

本文將通過一個具體示例,講解如何用mysqli::stmt_init結合prepare()result_metadata()方法獲取數據庫字段的元數據。

步驟一:建立數據庫連接

首先,我們需要用mysqli類連接到數據庫。

 <?php
$mysqli = new mysqli('localhost', 'username', 'password', 'database');

if ($mysqli->connect_errno) {
    die('連接失敗: ' . $mysqli->connect_error);
}
?>

步驟二:初始化並準備SQL 語句

接下來,我們使用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()會返回一個包含字段詳細信息的對象,常用屬性包括:

  • name → 字段名稱

  • type → 字段類型(數字代碼,需對照手冊)

  • max_length → 字段的最大長度(注意:只對結果集生效)

步驟五:釋放資源並關閉連接

最後,不要忘記釋放語句和關閉數據庫連接:

 <?php
$stmt->close();
$mysqli->close();
?>

示例輸出

假設查詢返回了三個字段id , name , email ,輸出可能如下:

 字段名: id
字段類型: 3
最大長度: 0
-----------------------
字段名: name
字段類型: 253
最大長度: 0
-----------------------
字段名: email
字段類型: 253
最大長度: 0

注意,字段類型的數字值需要參考MySQL 手冊的類型常量,比如3代表MYSQLI_TYPE_LONG253代表MYSQLI_TYPE_VAR_STRING

小結