zoukankan      html  css  js  c++  java
  • 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其他错误的处理方式

  • 相关阅读:
    Jquery开发技巧汇总
    (转)
    C#中的委托和时间
    asp.net中like 使用参数化(转)
    省市选择
    安卓对话框
    z转自 西西吹雪
    winform控件验证技术(转)
    C#获取网卡Mac地址 .(转)
    关于GDI+错误的修正
  • 原文地址:https://www.cnblogs.com/xiongji/p/3663085.html
Copyright © 2011-2022 走看看