我有一些C ++代码,它使用C libmysqlcleint库调用存储过程。我通过MySQL Workbench应用程序上的查询运行以下SQL代码,将程序存储到我的数据库中。
每当我的C ++代码尝试多次调用存储的sql过程时,查询失败并显示“命令不同步;您现在无法运行此命令”错误。我已将我的代码修剪为最简单的形式,显示此错误。
以下是我尝试运行的存储SQL过程:
DELIMITER $$
CREATE PROCEDURE test()
BEGIN
SET @statement = CONCAT("SELECT 1");
PREPARE command FROM @statement;
EXECUTE command;
DEALLOCATE PREPARE command;
END$$
DELIMITER ;
这是我的C ++代码,试图重复调用此过程:
#include <iostream>
#include <mysql/mysql.h>
int main() {
MYSQL sql;
mysql_init(&sql);
mysql_real_connect(&sql, "localhost", "password", "my-db", 0, NULL, 0);
for(int i=0; i<5; ++i) {
if(mysql_query(&sql, "CALL test()") == 0)
std::cout << "OK" << std::endl;
else
std::cout << mysql_error(&sql) << std::endl;
}
mysql_close(&sql);
return 0;
}
其中给出了以下输出:
OK
Commands out of sync; you can't run this command now
Commands out of sync; you can't run this command now
Commands out of sync; you can't run this command now
Commands out of sync; you can't run this command now
我在other文章中看到,这个问题可能是由数据库返回多个结果(我只得到1个结果)或用户没有调用mysql_store_results(我是)引起的。使用mysql客户端cli时,我可以多次调用存储过程,没有任何问题。在我的实际,非简化的应用程序中,我需要使用存储过程。
我错过了什么?
更新
我将上面的示例代码更改为更简单,同时仍然显示问题,我还更新了问题的背景,以提供更多信息。