1

环境:

我正在使用 MySQL C 连接器编写代码。

错误:

获取数据的第二次(以及所有后续)调用始终返回“命令不同步”“现在无法运行此命令”错误。

  • 我为每个调用运行相同的 sql。
  • 如果我关闭呼叫之间的连接,则不会发生错误。

算法:

我准备调用一个存储过程。

调用 mysql_stmt_result_metadata() 来获取 t 元数据。

绑定结果。

调用 mysql_stmt_store_result() 来缓冲结果。

调用 mysql_stmt_fetch() 以获取所有结果。

完成后调用 mysql_stmt_free_result()。

调用 mysql_stmt_close();

我从这个例子中建模了我的代码。我所做的唯一更改是调用 mysql_stmt_store_result() 以便在获取结果集之前获取结果集的大小。

有什么建议么?

4

1 回答 1

2

这一段给出了线索​​:

“如果您的程序使用 CALL 语句来执行存储过程,则必须启用 CLIENT_MULTI_RESULTS 标志。这是因为每个 CALL 都会返回一个结果来指示调用状态,以及在过程中执行的语句可能返回的任何结果集。因为 CALL 可以返回多个结果,所以使用一个调用 mysql_next_result() 的循环来处理它们,以确定是否还有更多结果。”

存储过程可能只返回一个结果集,并且没有输出参数,但您会收到许多结果集,有些相同,有些为空。使用标记为不是输出参数的第一个结果集似乎对我有用。

于 2013-06-24T22:31:52.700 回答