Kaynağa Gözat

数据库错误提示

tags/6.1.7
tianya 3 yıl önce
ebeveyn
işleme
a4a5a03749
3 değiştirilmiş dosya ile 34 ekleme ve 38 silme
  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 Dosyayı Görüntüle

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

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


+ 16
- 20
src/system/database/dedesqli.class.php Dosyayı Görüntüle

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


+ 15
- 16
src/system/database/dedesqlite.class.php Dosyayı Görüntüle

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


Yükleniyor…
İptal
Kaydet