我有一些c代码,它使用c libmysqlcleint库调用存储过程。我通过mysql工作台应用程序上的查询运行下面的sql代码,将过程存储到数据库中。
每当我的c代码多次尝试调用存储的sql过程时,查询就会失败,并出现“commands-out-of-sync;“现在不能运行此命令”错误。我已经将代码精简为显示此错误的最简单形式。
下面是我尝试运行的存储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
我在其他文章中看到,这个问题可能是由数据库返回多个结果(我只得到一个结果)或用户没有调用mysql\u store\u results(我是)引起的。在使用mysql客户机cli时,我可以多次调用存储过程,没有任何问题。在我的实际应用程序中,我需要使用存储过程。
我错过了什么?
更新
我将上面的示例代码更改为更简单,同时仍然显示问题,并且还更新了问题的背景以提供更多信息。
暂无答案!
目前还没有任何答案,快来回答吧!