mysql capi“命令不同步;你现在无法运行此命令”

时间:2018-04-11 22:02:42

标签: c++ mysql

我有一些C ++代码,它使用C libmysqlcleint库调用存储过程。我通过My​​SQL 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时,我可以多次调用存储过程,没有任何问题。在我的实际,非简化的应用程序中,我需要使用存储过程。

我错过了什么?

更新

我将上面的示例代码更改为更简单,同时仍然显示问题,我还更新了问题的背景,以提供更多信息。

0 个答案:

没有答案