Win7下的MySQl 5.6,C API编写的语句。第一次使用mysql_stmt_store_result()。
我准备了一个缓冲区来保存 40 条记录(例如,struct TICK ticks[40]
)。在绑定(bind)数组中,我设置了缓冲区中第一个结构体元素的地址(例如,bind.buffer = (char*)&ticks[0].elem1; 等)。在 bind.buffer_length
中,我为结构体的所有元素放入了缓冲区中的可用空间,例如 sizeof (ticks.elem1)*40
。我还设置了绑定(bind)结构的其他一些元素。
我调用mysql_stmt_store_result(),然后调用mysql_stmt_fetch()。对mysql_stmt_fetch()的调用获取结果集的第一条记录并将其正确地放入ticks[0]中,但这就是它检索的全部内容。下一次调用 mysql_stmt_fetch() 会检索第二条记录,并将其覆盖在第一条记录上(在 ticks[0] 处),后续调用也会执行相同的操作。
我正在遵循 mysql 引用手册 mysql-stmt-fetch 中 mysql_stmt_fetch() 页面上的示例。 。我尝试设置光标但无济于事。是否mysql_stmt_store_result仅影响结果在客户端上缓冲,但它依赖于mysql_stmt_fetch,因此一次只检索一条记录?该文档暗示它检索“完整结果集”,(请参阅 the mysql page, first paragraph )您能否建议我应该做什么才能在一次调用中正确获取客户端缓冲的完整结果集?我是否误解了文档——完整结果集一次只有一条记录? TIA
最佳答案
函数mysql_stmt_store_result()
在内部存储整个结果。如果您打算使用 mysql_stmt_row_seek() 或 mysql_stmt_row_tell() 等函数,则这是必需的。另外,在获取所有行之前,mysql 库无法得知结果集中的行数。如果存储结果,则可以在实际获取任何行之前获取结果集中的行数。
调用 mysql_stmt_store_result()
将一次获取所有行。
优点:
- 可以任意定位行光标
- 可以提前获取总行数
缺点:
- 您无法提前知道需要多少内存来存储完整的结果集
- 您无法提前知道需要多长时间才能检索完整的结果集
关于mysql - mysql_stmt_store_result 一次只返回一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27803348/