打开连接时用mysql_real_connect(),传递参数CLIENT_MULTI_STATEMENTS以支持多语句查询
每执行mysql_query()来插入数据后,调用以下函数来清空返回结果集,以避免2014错误
void clear_result(MYSQL* conn)
{
if(!conn)
return;
do
{
MYSQL_RES* res = mysql_store_result(conn);
mysql_free_result(res);
}
while(0==mysql_next_result(conn));
}但为什么一个查询里有三条insert into语句时,这个函数就会莫明其妙的崩掉,不明白
用gdb跟踪了好多遍,发现最后一遍循环时,调用mysql_next_result()后,conn这个结构里的数据全部都被破坏了
都是无效地址,请高手帮帮忙

解决方案 »

  1.   

    do.. while和while... do显然是不一样的,
    前者,无论条件是否为真,至少要执行一次,所以最后一次那个可能会完蛋。
    你把while()置到前头试。
      

  2.   

    对于多结果集的查询,mysql默认先返回第一个结果集,所以这跟do..while, while..do没有关系
    我用的mysql是5.0.15b版本,怀疑可能是个BUG
      

  3.   

    嗯,有理。
    你用的beta版本?至少,,,应该用一个正式release的版本。我在5.1版上测了一下,没什么问题。这个看来应该是5.0.15b的一个bug.
      

  4.   

    不知道楼上的测试的SQL语句用的什么样的
    我用的是这种:
    insert into <table>(...) values(...), (...), (...), (...);
    insert into <table>(...) values(...), (...), (...), (...);
    insert into <table>(...) values(...), (...), (...), (...);这个BUG在5.0的release版本中也存在,很奇怪,为什么它的BUG列表中竟然找不到为了不依赖于这种特定版本的BUG,我决定不使用多语句查询了,免得增加软件安装与使用的麻烦
      

  5.   

    我是在5.1.46中测的。发现在5.0.9.beta中,也是好用的。  
    我测的就是你说的这种多条insert,";"分隔的情况。
      

  6.   

    感谢楼上的支持,我现在已经改成单SQL语句了,结贴送分