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()” 中的示例。