请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

一起开发

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

独立分解出来的Discuz数据库DB类,非常实用

发表于 2012-12-22 18:02 作者:phper
php结合memcache实现访问统计文章点击的计数
随着访问量的增大,点击数直接更新数据库已经不太可能了,数据库中点击的更新 ...
Web开发利器,简版开发手册助您快速开发(图
web开发,帮助手册是我们经常查询的,查函数、查属性等等,下面图片里综合了各开发手册 ...
本帖最后由 phper 于 2012-12-22 18:09 编辑

看到discuz 数据库操作类非常强大,做项目的时候经常想将discuz X里面的数据库类迁移到自己的程序里,下面我们就来看一下:
  1. <?php
  2.         /**
  3.          * write by www.17kaifa.com
  4.          * modified by discuz X1.5 DB
  5.          */
  6. class Mysql{
  7.         
  8.         private $host; //主机名
  9.         private $username; //用户名
  10.         private $password; //密码
  11.         private $dbname; //数据库名
  12.         private $conn; //链接资源
  13.         private $pconnect; //是否持久连接
  14.         private $charset; //数据库编码
  15.         public $histories; //保存执行的sql语句
  16.         public $querynum = 0;  //查询的次数
  17.         
  18.         //构造函数,初始化时连接数据库
  19.         public function __construct($host, $username, $password, $dbname, $charset, $pconnect = 0){
  20.                 $this->host = $host;
  21.                 $this->username = $username;
  22.                 $this->password = $password;
  23.                 $this->dbname = $dbname;
  24.                 $this->charset = $charset;
  25.                 if($pconnect){
  26.                         if(!$this->conn = mysql_pconnect($this->host,$this->username,$this->password)){
  27.                                 $this->halt('Cannot connect to mysql');
  28.                         }
  29.                 }else{
  30.                         if(!$this->conn = mysql_connect($this->host,$this->username,$this->password)){
  31.                                 $this->halt('Cannot connect to mysql');
  32.                         }
  33.                 }
  34.                 mysql_select_db($this->dbname);
  35.                 mysql_query("SET NAMES {$this->charset}");
  36.         }
  37.         //使用mysql_unbuffered_query不会使用缓冲区,但是它也有缺点,比如你不能使用mysql_num_rows来取得它结果的数量。
  38.         function query($sql, $type = '', $cachetime = FALSE) {
  39.                 $func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ? 'mysql_unbuffered_query' : 'mysql_query';
  40.                 if(!($query = $func($sql, $this->conn)) && $type != 'SILENT') {
  41.                         $this->halt('MySQL Query Error', $sql);
  42.                 }
  43.                 $this->querynum++;
  44.                 $this->histories[] = $sql;
  45.                 return $query;
  46.         }

  47.         //默认返回关联数组
  48.         public function fetch_array($query, $result_type = MYSQL_ASSOC) {
  49.                 return mysql_fetch_array($query, $result_type);
  50.         }

  51.         //返回第一行第一列
  52.         function result_first($sql) {
  53.                 $query = $this->query($sql);
  54.                 return $this->result($query, 0);
  55.         }

  56.         //返回第一行数据
  57.         function fetch_first($sql) {
  58.                 $query = $this->query($sql);
  59.                 return $this->fetch_array($query);
  60.         }

  61.         function fetch_all($sql, $id = '') {
  62.                 $arr = array();
  63.                 $query = $this->query($sql);
  64.                 while($data = $this->fetch_array($query)) {
  65.                         $id ? $arr[$data[$id]] = $data : $arr[] = $data;
  66.                 }
  67.                 return $arr;
  68.         }
  69.         function affected_rows() {
  70.                 return mysql_affected_rows($this->conn);
  71.         }

  72.         function error() {
  73.                 return (($this->conn) ? mysql_error($this->conn) : mysql_error());
  74.         }

  75.         function errno() {
  76.                 return intval(($this->conn) ? mysql_errno($this->conn) : mysql_errno());
  77.         }

  78.         function result($query, $row) {
  79.                 $query = @mysql_result($query, $row);
  80.                 return $query;
  81.         }

  82.         function num_rows($query) {
  83.                 $query = mysql_num_rows($query);
  84.                 return $query;
  85.         }
  86.        //返回字段的数目
  87.         function num_fields($query) {
  88.                 return mysql_num_fields($query);
  89.         }

  90.         function free_result($query) {
  91.                 return mysql_free_result($query);
  92.         }
  93.         //如果 AUTO_INCREMENT 的列的类型是 BIGINT,则 mysql_insert_id() 返回的值将不正确,但是可以用LAST_INSERT_ID() 来替代
  94.         function insert_id() {
  95.                 return ($id = mysql_insert_id($this->conn)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);
  96.         }
  97.         
  98.         function fetch_row($query) {
  99.                 $query = mysql_fetch_row($query);
  100.                 return $query;
  101.         }
  102.         //取得列信息
  103.         function fetch_fields($query) {
  104.                 return mysql_fetch_field($query);
  105.         }

  106.         function version() {
  107.                 return mysql_get_server_info($this->conn);
  108.         }

  109.         function close() {
  110.                 return mysql_close($this->conn);
  111.         }
  112.         //中断提示
  113.         public function halt($message = '', $sql = ''){
  114.                 $error = mysql_error();
  115.                 $errorno = mysql_errno();
  116.                 $s = '';
  117.                 if($message) {
  118.                         $s = "<b>Error info:</b> $message
  119. ";
  120.                 }
  121.                 if($sql) {
  122.                         $s .= '<b>SQL:</b>'.htmlspecialchars($sql).'
  123. ';
  124.                 }
  125.                 $s .= '<b>Error:</b>'.$error.'
  126. ';
  127.                 $s .= '<b>Errno:</b>'.$errorno.'
  128. ';
  129.                 exit($s);
  130.         }
  131. }
  132. ?>
复制代码
discuz X1.5 DB数据库类详细说明
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|一起开发   

GMT+8, 2017-9-23 20:46 , Processed in 0.116313 second(s), 28 queries .

Powered by Discuz! X2.5 Licensed

© 2001-2012 Comsenz Inc.

回顶部