zoukankan      html  css  js  c++  java
  • 解决error:2014 Commands out of sync; you can't run this command now

    前两天搞mysql的东西,用mysql提供的C API 访问,遇到些问题,在这里分享一下,希望对其他人有帮助。

    mysql C API 调用存储过程,并返回结果集。需要注意几个问题:

    在建立链接的时候要加选项CLIENT_MULTI_STATEMENTS CLIENT_MULTI_RESULTS,以便可以让query执行多个语句。

    mysql_real_connect(mySQL,serverIP,user,password,database,serverPort,NULL,CLIENT_MULTI_STATEMENTS)

    当query时可能产生错误error:2014 Commands out of sync; you can't run this command now

    Mysql文档中说明错误:Commands out of sync

    If you get Commands out of sync; you can't run this command now in your client code, you are calling client functions in the wrong order.

    This can happen, for example, if you are using mysql_use_result() and try to execute a new query before you have called mysql_free_result(). It can also happen if you try to execute two queries that return data without calling mysql_use_result() or mysql_store_result() in between.

    当执行完query后,mysql将结果集放在一个result集中,产生以上问题的原因有两个:

    一是未将MYSQL_RES所指对象释放,即在下次查询时要mysql_free_result();

    二是结果result集不为空,这个原因比较隐蔽。解决方法可以用如下写法:

    do

    {

      /* Process all results */

      printf("total affected rows: %lld", mysql_affected_rows(mysql));

      ...

      if (!(result= mysql_store_result(mysql)))

      {

         printf(stderr, "Got fatal error processing query/n");

         exit(1);

      }

      process_result_set(result); /* client function */

      mysql_free_result(result);

    } while (!mysql_next_result(mysql));

    还有个问题感觉比较奇怪,我调用一个存储过程,存储过程中就一句select

    Create procedure test()

    Begin

    Select * from test ;

    End ;

    用以上方法处理结果集循环会执行两次,开始我只调了一次result= mysql_store_result(mysql)),导致以后执行query2014错误。

  • 相关阅读:
    Redis源码分析(二十一)--- anet网络通信的封装
    leetcode 总结part1
    leetcode String to Integer (atoi)
    leetcode 165. Compare Version Numbers
    leetcode 189. Rotate Array
    leetcode 168. Excel Sheet Column Title
    leetcode 155. Min Stack
    leetcode 228. Summary Ranges
    leetcode 204. Count Primes
    leetcode 6. ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/chenjianhong/p/4145003.html
Copyright © 2011-2022 走看看