|
Server : Apache System : Linux iZ6xhqomji47p1Z 5.10.134-15.al8.x86_64 #1 SMP Thu Jul 20 00:44:04 CST 2023 x86_64 User : www ( 1000) PHP Version : 8.1.30 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv Directory : /www/wwwroot/fsjlkj.cn/core/library/think/exception/ |
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://zjzit.cn>
// +----------------------------------------------------------------------
namespace think\exception;
use think\Config;
/**
* PDO异常处理类
* 重新封装了系统的\PDOException类
*/
class PDOException extends DbException
{
/**
* PDOException constructor.
* @param \PDOException $exception
* @param array $config
* @param string $sql
* @param int $code
*/
public function __construct(\PDOException $exception, array $config, $sql, $code = 10501)
{
$error = $exception->errorInfo;
$code0 = $exception->getCode();
$code1 = isset($error[1]) ? $error[1] : 0;
$code2 = isset($error[2]) ? $error[2] : '';
$this->setData('PDO Error Info', [
'SQLSTATE' => $code0,
'Driver Error Code' => $code1,
'Driver Error Message' => $code2,
]);
/*提高错误提示的友好性 by 小虎哥*/
$errcode = "{$code0}:{$code1}";
if (stristr($code2, "Incorrect string value:")) {
if (stristr($code2, "for column '")) {
$errcode = "HY000:-{$code1}";
}
}
$mysqlcode = Config::get('error_code.mysql');
$eyou_message = "";
if (!empty($mysqlcode[$errcode])) {
$code = 'eyou';
$eyou_message = $mysqlcode[$errcode];
}
/*--end*/
$message = $exception->getMessage();
try {
$message = iconv('GB2312', 'UTF-8', $message); // 转化编码 by 小虎哥
} catch (\Exception $e) {
if (function_exists('mb_convert_encoding')) {
$message = mb_convert_encoding($message, "UTF-8", "GBK");
}
}
$message = $eyou_message."\n\n[错误代码]\n".$message;
parent::__construct($message, $config, $sql, $code);
}
}