概述
跑数据流程这几天总是出错,暂时还没有精力重构,先处理一些紧急的问题吧。鉴于目前问题都出在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其他错误的处理方式
最后
以上就是隐形牛排为你收集整理的mysql 抛异常_MySQL异常处理的全部内容,希望文章能够帮你解决mysql 抛异常_MySQL异常处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复