Browse Source

数据库错误提示

tags/6.1.7
tianya 2 years ago
parent
commit
a4a5a03749
3 changed files with 34 additions and 38 deletions
  1. +3
    -2
      src/system/common.inc.php
  2. +16
    -20
      src/system/database/dedesqli.class.php
  3. +15
    -16
      src/system/database/dedesqlite.class.php

+ 3
- 2
src/system/common.inc.php View File

@@ -248,13 +248,14 @@ if (!defined('MYSQL_ASSOC')) {
if (!defined('MYSQL_NUM')) {
define('MYSQL_NUM', MYSQLI_NUM);
}
//全局常用函数
require_once(DEDEINC.'/common.func.php');

if ($GLOBALS['cfg_dbtype'] == 'mysql' || $GLOBALS['cfg_dbtype'] == 'mysqli') {
require_once(DEDEINC.'/database/dedesqli.class.php');
} else {
require_once(DEDEINC.'/database/dedesqlite.class.php');
}
//全局常用函数
require_once(DEDEINC.'/common.func.php');
//载入小助手配置,并对其进行默认初始化
$cfg_helper_autoload = array(
'charset', /* 编码小助手 */


+ 16
- 20
src/system/database/dedesqli.class.php View File

@@ -20,7 +20,7 @@ if (!defined('DEDEINC')) exit('dedebiz');
//在工程所有文件中均不需要单独初始化这个类,可直接用 $dsql 或 $db 进行操作
//为了防止错误,操作完后不必关闭数据库
if (!function_exists("mysqli_init")) {
echo "DedeBIZ提示:尚未发现开启mysqli模块,请在php.ini中启用`extension=mysqli`";
ShowMsg("尚未发现开启mysqli模块,请在php.ini中启用`extension=mysqli`","javasctipt:;",-1) ;
exit;
}
$dsql = $dsqli = $db = new DedeSqli(FALSE);
@@ -45,7 +45,7 @@ class DedeSqli
var $parameters;
var $isClose;
var $safeCheck;
var $showError = false;
var $showError = true;
var $recordLog = false; //记录日志到data/mysqli_record_log.inc便于进行调试
var $isInit = false;
var $pconnect = false;
@@ -108,14 +108,20 @@ class DedeSqli
@list($dbhost, $dbport) = explode(':', $this->dbHost);
!$dbport && $dbport = 3306;
$this->linkID = mysqli_init();
mysqli_real_connect($this->linkID, $dbhost, $this->dbUser, $this->dbPwd, false, $dbport);
mysqli_errno($this->linkID) != 0 && $this->DisplayError('系统提示:链接('.$this->pconnect.') 到MySQL发生错误');
try {
mysqli_real_connect($this->linkID, $dbhost, $this->dbUser, $this->dbPwd, false, $dbport);
mysqli_errno($this->linkID) != 0 && $this->DisplayError('链接('.$this->pconnect.') 到MySQL发生错误');
} catch (Exception $e) {
$this->DisplayError("<span style='color:#dc3545'>连接数据库失败,可能数据库密码不对或数据库服务器出错</span>");
exit;
}
//复制一个对象副本
CopySQLiPoint($this);
}
//处理错误,成功连接则选择数据库
if (!$this->linkID) {
$this->DisplayError("系统提示:<span style='color:#dc3545'>连接数据库失败,可能数据库密码不对或数据库服务器出错</span>");
$this->DisplayError("<span style='color:#dc3545'>连接数据库失败,可能数据库密码不对或数据库服务器出错</span>");
exit();
}
$this->isInit = TRUE;
@@ -468,7 +474,7 @@ class DedeSqli
}
function RecordLog($runtime = 0)
{
$RecordLogFile = dirname(__FILE__).'/../data/mysqli_record_log.inc';
$RecordLogFile = DEDEDATA.'/mysqli_record_log.inc';
$url = $this->GetCurUrl();
$savemsg = <<<EOT
@@ -484,20 +490,10 @@ EOT;
//显示数据链接错误信息
function DisplayError($msg)
{
$errorTrackFile = dirname(__FILE__).'/../../data/mysqli_error_trace.inc';
if (file_exists(dirname(__FILE__).'/../../data/mysqli_error_trace.php')) {
@unlink(dirname(__FILE__).'/../../data/mysqli_error_trace.php');
}
$errorTrackFile = DEDEDATA.'/mysqli_error_trace.inc';
if ($this->showError) {
$emsg = '';
$emsg .= "<div><h3>DedeBIZ Error Warning!</h3>\r\n";
$emsg .= "<div><a href='https://www.dedebiz.com' target='_blank' style='color:#dc3545'>Technical Support: https://www.dedebiz.com</a></div>";
$emsg .= "<div style='line-helght:160%;font-size:14px;color:green'>\r\n";
$emsg .= "<div style='color:blue'><br>Error page: <span style='color:#dc3545'>".$this->GetCurUrl()."</span></div>\r\n";
$emsg .= "<div>Error infos: {$msg}</div>\r\n";
$emsg .= "<br></div></div>\r\n";
echo $emsg;
ShowMsg("{$msg}", "javascript:;", -1);
exit;
}
$savemsg = 'Page: '.$this->GetCurUrl()."\r\nError: ".$msg."\r\nTime".date('Y-m-d H:i:s');
//保存MySql错误日志
@@ -536,7 +532,7 @@ if (!function_exists('CheckSql')) {
$error = '';
$old_pos = 0;
$pos = -1;
$log_file = DEDEINC.'/../data/'.md5($cfg_cookie_encode).'_safe.txt';
$log_file = DEDEDATA.'/'.md5($cfg_cookie_encode).'_safe.txt';
$userIP = GetIP();
$getUrl = GetCurUrl();
//如果是普通查询语句,直接过滤一些特殊语法


+ 15
- 16
src/system/database/dedesqlite.class.php View File

@@ -17,11 +17,15 @@ if (!defined('DEDEINC')) exit('dedebiz');
* @link https://www.dedebiz.com
*/
@set_time_limit(0);
if (!extension_loaded("sqlite3")) {
ShowMsg("尚未发现开启sqlite3模块,请在php.ini中启用`extension=sqlite3`","javasctipt:;",-1) ;
exit;
}
//在工程所有文件中均不需要单独初始化这个类,可直接用 $dsql 或 $db 进行操作
//为了防止错误,操作完后不必关闭数据库
$dsql = $dsqlitete = $db = new DedeSqlite(FALSE);
/**
* Dede MySQLi数据库类
* Dede SQLite3数据库类
*
* @package DedeSqli
* @subpackage DedeBIZ.Libraries
@@ -49,7 +53,7 @@ class DedeSqlite
var $parameters;
var $isClose;
var $safeCheck;
var $showError = false;
var $showError = true;
var $recordLog = false; //记录日志到data/mysqli_record_log.inc便于进行调试
var $isInit = false;
var $pconnect = false;
@@ -249,6 +253,10 @@ class DedeSqlite
$t1 = ExecTime();
//var_dump($this->queryString);
$this->result[$id] = $this->linkID->query($this->queryString);
if (!$this->result[$id]) {
$this->DisplayError("执行SQL错误:{$this->linkID->lastErrorMsg()}");
exit;
}
//var_dump(mysql_error());
//查询性能测试
if ($this->recordLog) {
@@ -479,7 +487,7 @@ class DedeSqlite
}
function RecordLog($runtime = 0)
{
$RecordLogFile = dirname(__FILE__).'/../data/mysqli_record_log.inc';
$RecordLogFile = DEDEDATA.'/mysqli_record_log.inc';
$url = $this->GetCurUrl();
$savemsg = <<<EOT
@@ -495,22 +503,13 @@ EOT;
//显示数据链接错误信息
function DisplayError($msg)
{
$errorTrackFile = dirname(__FILE__).'/../../data/mysqli_error_trace.inc';
if (file_exists(dirname(__FILE__).'/../../data/mysqli_error_trace.php')) {
@unlink(dirname(__FILE__).'/../../data/mysqli_error_trace.php');
}
$errorTrackFile = DEDEDATA.'/sqlite_error_trace.inc';
if ($this->showError) {
$emsg = '';
$emsg .= "<div><h3>DedeBIZ Error Warning!</h3>\r\n";
$emsg .= "<div><a href='https://www.dedebiz.com' target='_blank' style='color:#dc3545'>Technical Support: https://www.dedebiz.com</a></div>";
$emsg .= "<div style='line-helght:160%;font-size:14px;color:green'>\r\n";
$emsg .= "<div style='color:blue'><br>Error page: <span style='color:#dc3545'>".$this->GetCurUrl()."</span></div>\r\n";
$emsg .= "<div>Error infos: {$msg}</div>\r\n";
$emsg .= "<br></div></div>\r\n";
echo $emsg;
ShowMsg("{$msg}", "javascript:;", -1);
exit;
}
$savemsg = 'Page: '.$this->GetCurUrl()."\r\nError: ".$msg."\r\nTime".date('Y-m-d H:i:s');
//保存MySql错误日志
//保存SQLite错误日志
$fp = @fopen($errorTrackFile, 'a');
@fwrite($fp, '<'.'?php exit();'."\r\n/*\r\n{$savemsg}\r\n*/\r\n?".">\r\n");
@fclose($fp);


Loading…
Cancel
Save