当前位置: 首页> 最新文章列表> 有没有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)查询的结果集结构,获取字段信息后,你可以根据需要动态绑定列并提取查询结果。这在处理复杂的查询和生成动态页面时非常有用。