我已经浏览了几天的MySQL API和Web,但是遗憾的是我找不到一个明确的解决方案,这是完成C应用程序数据库部分所要做的最后一件事。
我正在使用准备好的语句,并且需要我的代码在调用MYSQL_BIND
之后和执行第一个mysql_stmt_execute()
之前动态创建输出mysql_stmt_fetch()
结构。 MYSQL_BIND
结构需要分配它的buffer
以便通过提取存储数据,因此在调用提取之前,我需要知道数据的类型及其长度(如果是字符串或blob)。 API somehow offer a confusing solution for the length,但是没有任何关于类型的说明。关于长度,如果我遵循前面提到的API页面中建议的第一个策略,我真的不明白如何访问max_length
参数,该参数应为每个字段设置mysql_stmt_store_result()
。
希望有人知道这一点。
最佳答案
感谢@Barmar的评论,以防万一有人对我有同样的疑问,这是我的做法:
在mysql_stmt_execute()
之后,将mysql_stmt_attr_set()
与STMT_ATTR_UPDATE_MAX_LENGTH
用作第二个参数。这将告诉mysql_stmt_store_result()
为您设置max_length
。
用MYSQL_RES*
获取mysql_stmt_store_result()
指针(完成后请记住使用mysql_free_result()
)。
分配许多mysql_stmt_field_count()
返回的绑定
对于每个输出绑定,使用MYSQL_FIELD*
获取它的mysql_fetch_field_direct()
指针
从type
结构的MYSQL_FIELD
字段获取列的数据类型
从max_length
结构的MYSQL_FIELD
字段获取列的长度(如果是字符串和斑点)。
现在,您可以将缓冲区绑定到该语句,并使用mysql_stmt_fetch()
来获取绑定中的行。
关于mysql - 在使用MySQL的C API在准备好的语句中进行第一次提取之前,如何学习返回参数的类型和长度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44035931/