[分享]MySQL一次执行多条语句的实现及常见问题_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2173 | 回复: 0   主题: [分享]MySQL一次执行多条语句的实现及常见问题        下一篇 
tangbao@.@
注册用户
等级:新兵
经验:67
发帖:62
精华:0
注册:2011-7-21
状态:离线
发送短消息息给tangbao@.@ 加好友    发送短消息息给tangbao@.@ 发消息
发表于: IP:您无权察看 2014-12-23 14:57:26 | [全部帖] [楼主帖] 楼主

    通常情况MySQL出于安全考虑不允许一次执行多条语句(但也不报错,很让人郁闷)。MySQL是支持在单个查询字符串中指定多语句执行的,使用方法是给链接指定参数:

//链接时设定

mysql_real_connect( ..., CLIENT_MULTI_STATEMENTS );

//或者中途指定

mysql_set_server_option( mysql, MYSQL_OPTION_MULTI_STATEMENTS_ON ); //mysql是连接的名称

当使用执行多语句功能后,一定要读完整个resault集,否则会出现错误:Commands out of sync; you can't run this command now

官方推荐的执行语句是这样的:

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 ) );

如果仅仅是插入等不需要返回值的SQL语句,也一样得读完整个resault集并释放,最小化的写法:

do

{

    result = mysql_store_result( mysql );

    mysql_free_result(result);

}while( !mysql_next_result( mysql ) );

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论