我已经浏览了几天的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/

10-11 03:26