MySQL:“命令不同步”错误(C连接器)

时间:2013-06-14 19:29:20

标签: c++ mysql windows gcc mysql-connector

环境:

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

错误:

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

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

算法:

我准备调用存储过程。

调用mysql_stmt_result_metadata()获取元数据。

绑定结果。

调用mysql_stmt_store_result()来缓冲结果。

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

完成后调用mysql_stmt_free_result()。

调用mysql_stmt_close();

我从this示例中建模了我的代码。我做的唯一更改是调用mysql_stmt_store_result(),这样我就可以在获取之前得到结果集的大小。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

本段给出了线索​​:

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

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