C语言连接Mysql数据库,执行mysql_query()或mysql_real_query()时出错,即返回值为1解决办法

出现这种问题,我这里遇到的原因是因为上一次查询的结果集没有释放完全,导致查询失败

此时的错误内容是:Commands out of sync; you can't run this command now

该错误内容由mysql_error(conn)语句输出。

如果你在上次查询时忘了调用mysql_free_result();

那就回去加一行就可以了。

如果还是不好使,请继续往下看。

很有可能你是在上次查询中调用了多条SELECT语句或调用了存储过程。在这种情况下,需要对mysql_real_connect()中的参数进行修改。

一般情况下,我们最后一个参数写的是0,但是如果你调用了存储过程,即返回集可能不只有一个,就需要将最后一个参数变成CLIENT_MULTI_STATEMENTS。

此外,该参数的其他值请参阅Mysql文档我查阅的中文网(非官方)

假如你还是不好使,那么你需要在原先释放结果集的地方,将原来的代码替换成

    while (!mysql_next_result(conn))
    {
        res = mysql_store_result(conn);
        mysql_free_result(res);
    }

其中conn是连接句柄,res是结果集

下面给上我的全部代码,该代码仅供参考,我将我的主机名删去了。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <mysql/mysql.h>
 4 int main()
 5 {
 6     int temppppp;
 7     char sql[100];                                                   //存放SQL语句
 8     char host[46] = ""; //MySQL数据库主机名
 9     char dburl[8] = "normal";                                        //数据库名称
10     const char username[9] = "arknight";                             //用户名
11     const char password[9] = "arknight";                             //密码
12     unsigned int port = 3306;                                        //端口号
13     MYSQL *conn;                                                     //Mysql连接指针
14     MYSQL_RES *res;                                                  //Mysql结果集
15     MYSQL_ROW row;                                                   //行变量
16     printf("正在尝试连接数据库
");
17     if ((conn = mysql_init((MYSQL *)0))                                                                                                                                       //初始化MYSQL
18         && (mysql_options(conn, MYSQL_SET_CHARSET_NAME, "utf8") == 0)                                                                                                         //开始连接
19         && mysql_set_server_option(conn, MYSQL_OPTION_MULTI_STATEMENTS_ON) 
20         && mysql_real_connect(conn, host, username, password, dburl, port, NULL, CLIENT_MULTI_STATEMENTS)) //连接成功
21     {
22         puts("连接成功");
23     }
24     else
25     {
26         puts("无法连接数据库");
27         exit(-1);
28     }
29 
30     int i = 0;
31     int ret = 0;
32 
33     strcpy(sql, "call gettype");
34     puts(".............................................");
35     ret = mysql_real_query(conn, sql, strlen(sql));
36     printf("******%d
", ret);
37     res = mysql_store_result(conn);
38     i = (int)mysql_num_rows(res);
39     for (int a = 0; a < i; a++)
40     {
41         row = mysql_fetch_row(res);
42         if (row == NULL)
43         {
44             break;
45         }
46         printf("%s	%s
", row[0], row[1]);
47     }
48     while (!mysql_next_result(conn))
49     {
50         res = mysql_store_result(conn);
51         mysql_free_result(res);
52     }
53     //输出完成
54     printf("FINISHED
");
55 
56     strcpy(sql, "select * from showall");
57     puts(".............................................");
58     ret = mysql_real_query(conn, sql, strlen(sql));
59     printf("%s", mysql_error(conn));
60     printf("******%d
", ret);
61     res = mysql_store_result(conn);
62     i = (int)mysql_num_rows(res);
63     for (int a = 0; a < i; a++)
64     {
65         row = mysql_fetch_row(res);
66         if (row == NULL)
67         {
68             break;
69         }
70         printf("%s	%s	%s	%s	%s
", row[0], row[1], row[2], row[3], row[4]);
71     }
72     while (!mysql_next_result(conn))
73     {
74         res = mysql_store_result(conn);
75         mysql_free_result(res);
76     }
77 
78     mysql_close(conn);
79     return 0;
80 }
View Code
原文地址:https://www.cnblogs.com/rogunt/p/13057670.html