mysql capi“命令不同步;“现在不能运行此命令”

mwg9r5ms  于 2021-06-24  发布在  Mysql
关注(0)|答案(0)|浏览(262)

我有一些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时,我可以多次调用存储过程,没有任何问题。在我的实际应用程序中,我需要使用存储过程。
我错过了什么?
更新
我将上面的示例代码更改为更简单,同时仍然显示问题,并且还更新了问题的背景以提供更多信息。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题