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

Posted

技术标签:

【中文标题】MySQL:“命令不同步”错误(C 连接器)【英文标题】:MySQL: "Commands out of Sync" error (C connector) 【发布时间】:2013-06-14 19:29:20 【问题描述】:

环境:

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

错误:

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

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

算法:

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

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

绑定结果。

调用 mysql_stmt_store_result() 来缓冲结果。

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

完成后调用 mysql_stmt_free_result()。

调用mysql_stmt_close();

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

有什么建议吗?

【问题讨论】:

你咨询过oracle吗:dev.mysql.com/doc/refman/5.0/en/commands-out-of-sync.html 如果 mysql_stmt_result_metadata() 什么都不返回,那么我不调用 store_result()。我没有描述我要回来的东西。我会尝试添加一个调用并丢弃结果,看看是否能解决问题。谢谢 【参考方案1】:

这一段给出了线索​​:

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

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

【讨论】:

以上是关于MySQL:“命令不同步”错误(C 连接器)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 错误 - 命令不同步;你现在不能运行这个命令

Mysql 错误 #2014 - 命令不同步;您现在无法在存储过程中运行此命令

命令不同步;在 Mysql 中调用存储过程时,您现在无法运行此命令

Python Mysql,“命令不同步;您现在无法运行此命令”

Mysql + django 异常:“命令不同步;您现在无法运行此命令”

当我尝试将 csv 导入 MYSQLdb 时,Python“命令不同步”错误消息