6.4.24 mysql_stmt_result_metadata()

MYSQL_RES *
mysql_stmt_result_metadata(MYSQL_STMT *stmt)

描述

mysql_stmt_result_metadata() 用于获取预处理语句的结果集元数据。使用它需要在语句被 mysql_stmt_execute() 执行时产生结果集。

mysql_stmt_result_metadata() 可以在使用 mysql_stmt_prepare() 预处理语句后,但在关闭语句句柄之前调用。由 mysql_stmt_result_metadata() 返回的结果集元数据是一个指向 MYSQL_RES 结构体的指针,可用于处理元信息,例如字段数量和单个字段信息。此结果集指针可以作为参数传递给任何处理结果集元数据的基于字段的 API 函数,例如

如果客户端已抑制元数据(如 第 3.6.7 节,“可选结果集元数据” 中所述),则 MYSQL_RES 结构体中的字段计数已填充,但没有字段信息。

完成对元数据结果集结构体的操作后,将其传递给 mysql_free_result() 释放它。这与释放从调用 mysql_store_result() 获取的结果集结构体的操作类似。

如果在 mysql_stmt_prepare() 之后但 mysql_stmt_execute() 之前调用 mysql_stmt_result_metadata(),则元数据中的列类型将由优化器确定。如果在 mysql_stmt_execute() 之后调用 mysql_stmt_result_metadata(),则元数据中的列类型将与结果集中实际存在的类型相同。在大多数情况下,这些类型应该相同。

如果执行的语句是 CALL 语句,则它可能会产生多个结果集。在这种情况下,不要在 mysql_stmt_prepare() 之后立即调用 mysql_stmt_result_metadata()。而是,在调用 mysql_stmt_execute() 后分别检查每个结果集的元数据。有关此技术的示例,请参见 第 3.6.5 节,“预处理 CALL 语句支持”

mysql_stmt_result_metadata() 返回的结果集只包含元数据。它不包含任何行结果。要获取行结果,请在使用 mysql_stmt_execute() 执行语句后,如常使用语句句柄与 mysql_stmt_fetch() 一同使用。

返回值

一个 MYSQL_RES 结果结构体。如果预处理语句不存在元信息,则为 NULL

错误

示例

请参见 第 6.4.12 节,“mysql_stmt_fetch()” 中的示例。