• 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
  • 相关阅读:
    java中 this和super的差别
    Servlet对文件的读写操作
    Android通过反射打造能够存储不论什么对象的万能SharedPreferences
    Solr5.3.1 SolrJ查询索引结果
    spring mvc form表单提交乱码
    多表利用DIH批量导入数据并建立索引注意事项
    【转】Solr从数据库导入数据(DIH)
    【转】solr+ajax智能拼音详解---solr跨域请求
    跨域请求获取Solr json检索结果并高亮显示
    Solr5.3.1通过copyField设置多个field(字段)同时检索
  • 原文地址:https://www.cnblogs.com/rogunt/p/13057670.html
Copyright © 2020-2023  润新知