mysql throw_MySQL异常处理

跑数据流程这几天总是出错,暂时还没有精力重构,先处理一些紧急的问题吧。鉴于目前问题都出在MySQL执行查询出错的情况,决定对mysql_query进行封装。封装函数如下。

目前只处理2006错误,对于1317错误,只有重试的方法,以后再补充。

对于2006错误,需要重连MySQL,但是有一点需要注意的是,在重连之前一定要先关闭之前的连接,否则永远报2006错误

之前没写过异常处理,try{}catch(){},嘿嘿,用了一下就会了。

/**

* @param $sql 需要执行的SQL语句

* @param $link 数据库连接

* @param $conn 使用线上还是线下数据库,默认为线下 online:线上 offline:线下

*/

function dh_mysql_query($sql, &$link=null, $db) {

$i = 0;

do{

try{

$ret = mysql_query($sql);

if(!$ret){

//抛出MySQL错误号

$ec = mysql_errno();

throw new Exception($ec);

}

}catch(Exception $e){

//处理mysql错误号

switch($e->getMessage()){

case '2006':// MySQL Server has gone away

mysql_close($link);

if($db == "online"){

$link = connect_online();

}else {

$link = conn_db();

}

break;

case '1317'://Query execution was interrupted

sleep(3);

break;

}

}

$i ++;

}while(!$ret && $i<5);

if(!$ret){

$ec = mysql_errno();

$err = mysql_error();

$desc = json_encode(array('event'=>'mysql query error','sql'=>$sql,'errno'=>$ec,'errmsg'=>$err,'debug_info'=>debug_backtrace(true)));

write_log($desc);

//curl_send_msg('13691102775',$desc);

//exit($desc);

}

return $ret;

}

以后再补充针对MySQL其他错误的处理方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值