/*

[Discuz!] (C)2001-2007 Comsenz Inc.

This is NOT a freeware, use is subject to license terms

$Id: db_mysql.class.php 13278 2008-04-03 09:39:07Z cnteacher $

*/

//禁止外部引用,即非本地使用.

if(!defined('IN_DISCUZ')) {

exit('Access Denied');

}

class dbstuff {

var $version = '';  //mysql版本号

var $querynum = 0;  //执行次数

var $link;         //mysql 连接

//数据库服务名,用户名,密码,数据库名,默认非长连接,连接报错开头,数据库字符编码

function connect($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0, $halt = TRUE, $dbcharset2 = '') {

//如果$pconnect===0就mysql_connect或者就mysql_pconnect;

$func = empty($pconnect) ? 'mysql_connect' : 'mysql_pconnect';

//连接错误

if(!$this->link = @$func($dbhost, $dbuser, $dbpw, 1)) {

//判断一下$halt是为为真再报错.(这有意思);

$halt && $this->halt('Can not connect to MySQL server');

} else {

//4.1以上进入.低过4.1神仙都难帮你了.

if($this->version() > '4.1') {

//引入两个编码集,统一编码/及数据库编码

global $charset, $dbcharset;

//一切依类实例时为标准

$dbcharset = $dbcharset2 ? $dbcharset2 : $dbcharset;

//如果$dbcharset不存在,就用统一编码来处理. 并且判断统一编码是否在数组中,存在就删除utf-8中的-(因为统一编码一定会有中间的'-').否则保持空白.

$dbcharset = !$dbcharset && in_array(strtolower($charset), array('gbk', 'big5', 'utf-8')) ? str_replace('-', '', $charset) : $dbcharset;

//如果$dbcharset存在就组全SQL语句,否则为空.

$serverset = $dbcharset ? 'character_set_connection='.$dbcharset.', character_set_results='.$dbcharset.', character_set_client=binary' : '';

//判断一下mysql版本号,返回: ,sql_mode='';

$serverset .= $this->version() > '5.0.1' ? ((empty($serverset) ? '' : ',').'sql_mode=/'/'') : '';

//执行了. 全句SQL: SET character_set_connection=utf8, character_set_results=utf8, character_set_client=binary,sql_mode=''

$serverset && mysql_query("SET $serverset", $this->link);

}

//选择数据库名.

$dbname && @mysql_select_db($dbname, $this->link);

}

}

//方法:选择数据库名

function select_db($dbname) {

return mysql_select_db($dbname, $this->link);

}

//方法:依字段键名方法返回查询结果

function fetch_array($query, $result_type = MYSQL_ASSOC) {

return mysql_fetch_array($query, $result_type);

}

//方法: 更强悍, 执行与查询共体.通常在查询一条信息时使用.

function fetch_first($sql) {

return $this->fetch_array($this->query($sql));

}

//方法:清除查询结果

function result_first($sql) {

return $this->result($this->query($sql), 0);

}

//方法:sql执行,最通用的方法

function query($sql, $type = '') {

//引入几个变量, 没一个认识的.似乎里面也没有用到, 大可以删除.

global $debug, $discuz_starttime, $sqldebug, $sqlspenttimes;

//神仙也不知道discuz 7.0 /include/debug.func.php文件在哪.是个bug吧.

if(defined('SYS_DEBUG') && SYS_DEBUG) {

@include_once DISCUZ_ROOT.'./include/debug.func.php';

sqldebug();

}

//UNBUFFERED模式.

$func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?

'mysql_unbuffered_query' : 'mysql_query';

//判断执行有结果.

if(!($query = $func($sql, $this->link))) {

//判断连接成功,并且$type中没有RETRY

if(in_array($this->errno(), array(2006, 2013)) && substr($type, 0, 5) != 'RETRY') {  //这个if会被无视

$this->close();   //关闭连接.

require DISCUZ_ROOT.'./config.inc.php';   //引入配置文件.

//调用连接方法.

$this->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, true, $dbcharset);

//执行SQL

$this->query($sql, 'RETRY'.$type);

} elseif($type != 'SILENT' && substr($type, 5) != 'SILENT') {  //报错.

$this->halt('MySQL Query Error', $sql);

}

}

//查询次数+1 (不清楚它的作用.)

$this->querynum++;

//返回结果集.(从这里看来,中间的判断其实没有作用);

return $query;

}

//取得前一次 MySQL 操作所影响的记录行数

function affected_rows() {

return mysql_affected_rows($this->link);

}

// 返回SQL错误

function error() {

return (($this->link) ? mysql_error($this->link) : mysql_error());

}

// 返回SQL错误与上结合.

function errno() {

return intval(($this->link) ? mysql_errno($this->link) : mysql_errno());

}

//清除执行结果

function result($query, $row = 0) {

$query = @mysql_result($query, $row);

return $query;

}

//取得结果集的条数.

function num_rows($query) {

$query = mysql_num_rows($query);

return $query;

}

//取得结果集中字段的数目

function num_fields($query) {

return mysql_num_fields($query);

}

//释放结果内存

function free_result($query) {

return mysql_free_result($query);

}

//取得前一次插入ID值.

function insert_id() {

return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);

}

//依数字键名返回查询结果.

function fetch_row($query) {

$query = mysql_fetch_row($query);

return $query;

}

//从结果集中取得列信息并作为对象返回

function fetch_fields($query) {

return mysql_fetch_field($query);

}

// 取得mysql版本号信息

function version() {

if(empty($this->version)) {

$this->version = mysql_get_server_info($this->link);

}

return $this->version;

}

//关闭连接

function close() {

return mysql_close($this->link);

}

//报错方法. 引入一个文件.

function halt($message = '', $sql = '') {

define('CACHE_FORBIDDEN', TRUE);

require_once DISCUZ_ROOT.'./include/db_mysql_error.inc.php';

}

}

?>

discuz db_mysql.calss.php,discuz 7.0 db_mysql.php 详解相关推荐

  1. ASP.NET2.0 ReportingServices使用详解

    ASP.NET2.0 ReportingServices使用详解 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/          时间:2007.4.9 本文先做 ...

  2. Python Numpy多维数组.sum(axis=0/1/2...) 详解

    Python Numpy多维数组.sum(axis=0/1/2-) 详解 numpy中axis取值的说明 首先对numpy中axis取值进行说明:一维数组时axis=0,二维数组时axis=0,1,维 ...

  3. Linux redis安装教程,Linux 下redis5.0.0安装教程详解

    Linux redis5.0.0安装,教程如下所示: 1.从官网下载,然后传到服务器,tar -zxvf解压 2.进入redis ? 3.安装:make, (1)若提示:: gcc: Command ...

  4. Zabbix5.0监控系统安装详解

    Zabbix5.0监控系统安装详解 一.Zabbix介绍 二.Zbbix的LAMP环境安装 1.防火墙和SElinux配置 2.安装LAMP环境 三.安装Zabbix软件 四.Zabbix的Mysql ...

  5. 稳扎稳打Silverlight(17) - 2.0数据之详解DataGrid, 绑定数据到ListBox

    [索引页] [源码下载] 稳扎稳打Silverlight(17) - 2.0数据之详解DataGrid, 详解ListBox 作者:webabcd 介绍 Silverlight 2.0 详解DataG ...

  6. Spring 3.0 注解注入详解

    Spring 3.0 注解注入详解 2011-04-15 09:44 17ZOUGUO ITEYE博客 我要评论(1) 字号:T | T AD: 一.各种注解方式 1.@Autowired注解(不推荐 ...

  7. linux添加nginx,linux下安装Nginx1.16.0的教程详解

    因为最近在倒腾linux,想安装新版本的nginx,找了一圈教程没有找到对应的教程,在稍微倒腾了一会之后终于成功的安装了最新版. 服务器环境为centos,接下来是详细步骤: 安装必要依赖插件 ? 创 ...

  8. 稳扎稳打Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器...

    [索引页] [×××] 稳扎稳打Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器 作者:webabcd 介绍 Silverlight 2.0 ...

  9. Android 10.0 Activity启动详解(二)

    Android 10.0 Activity启动详解(一) 我们在上一篇博客中已经介绍了关于Activity的一些基础概念.这一篇博客我们以Android 10.0的代码来分析Activity的启动流程 ...

  10. nginx1.0安装配置详解

    nginx1.0安装配置详解 本文转自:twenty_four的博文,自己稍作精简修改. http://twentyfour.blog.51cto.com/945260/568906 1.选择Ngin ...

最新文章

  1. linux zipinfo 命令详解
  2. 【Python面试】 列举Python中的标准异常类?
  3. 两家云服务器价格比较
  4. 127. Word Ladder
  5. 利用Arena Allocation避免HBase触发Full GC
  6. DllMain加载其他DLL造成的死锁问题及其解决办法
  7. 如果你是面试官,如何判断一个面试者的深度学习水平?
  8. 【学习OpenCV4】图像的模糊处理方法(均值滤波与高斯模糊)
  9. iOS开发学习之NSFetchedResultsController
  10. 2020年第十七届中国研究生数学建模竞赛赛题+解压码
  11. 【以太坊】代币创建过程
  12. SpringBoot项目resources下指定目录的所有文件下载到Centos服务器上,浏览器访问API后资源包直接下载本地磁盘,Java删除linux文件,zip文件打包
  13. 手机语言 Symbian 术语表
  14. u盘中毒如何删除system volume information文件
  15. 小米r2d做nas_零基础也可以打造智能家居,利用群晖docker将小米全家桶接入ios Homekit...
  16. mad和php的区别,良心解析kakaKUC-MAD好用吗?怎么样呢?体验揭秘分析
  17. 读书笔记之C Primer Plus 6
  18. JSP 手机销售管理系统 myeclipse开发web网页 mysql数据库
  19. Android4.4电池管理
  20. 基于深度学习的自动识别夹取机械臂

热门文章

  1. Ubuntu屏幕录像软件推荐-Kazam
  2. 【简单算法】47.帕斯卡三角形
  3. [转载]手机号码吉凶算法(附吉凶对照表)
  4. java基于Springboot+vue的校园新闻网站 element
  5. (4.6.30)组件化:Android项目构架演变之路
  6. 2017 年 11 个移动 App 开发趋势
  7. PAT乙级真题1058 || 选择题(详解,C/C++示例,测试点分析)
  8. 0204原来“瘦胖子”比“真胖子”更危险
  9. DHL快递已订购12架!全电动飞机Alice首飞成功;浙江嘉兴首家氧吧酒店开业 | 美通企业日报...
  10. 量产技术-把kingston U盘做成USB-CDROM启动盘