当前位置: 首页> 最新文章列表> 如何通过 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

小结