打开连接时用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这个结构里的数据全部都被破坏了
都是无效地址,请高手帮帮忙
每执行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这个结构里的数据全部都被破坏了
都是无效地址,请高手帮帮忙
前者,无论条件是否为真,至少要执行一次,所以最后一次那个可能会完蛋。
你把while()置到前头试。
我用的mysql是5.0.15b版本,怀疑可能是个BUG
你用的beta版本?至少,,,应该用一个正式release的版本。我在5.1版上测了一下,没什么问题。这个看来应该是5.0.15b的一个bug.
我用的是这种:
insert into <table>(...) values(...), (...), (...), (...);
insert into <table>(...) values(...), (...), (...), (...);
insert into <table>(...) values(...), (...), (...), (...);这个BUG在5.0的release版本中也存在,很奇怪,为什么它的BUG列表中竟然找不到为了不依赖于这种特定版本的BUG,我决定不使用多语句查询了,免得增加软件安装与使用的麻烦
我测的就是你说的这种多条insert,";"分隔的情况。