Discuz的MySQL Class

PHP代码
  1. <?php   
  2. class MySQL{   
  3.     //一些常量的的设定   
  4.     public $version = '';   
  5.     public $querynum = 0;   
  6.     public $link;   
  7.     //定义链接方法   
  8.     function connect($dbhost$dbuser$dbpw$dbname = ''$pconnect = 0, $halt = TRUE, $dbcharset2 = '') {   
  9.     //在方法定义传递参数时候就设置的pconnect=0.这个参数用来判断是否是个持续链接。   
  10.     //$func变量用来存储,判断$pconnect是否为空,如果是,则存储php到mysql的链接(非持续性)的方法名。反之,则存储php到mysql的持续链接的方法名。   
  11.         $func = emptyempty($pconnect) ? 'mysql_connect' : 'mysql_pconnect';   
  12.         //建立一个链接给类的属性link之中。并且在建立链接的时候就设定编码方式是如何的。   
  13.         if(!$this->link = @$func($dbhost$dbuser$dbpw, 1)) {   
  14.             $halt && $this->halt('Can not connect to MySQL server');   
  15.         } else {   
  16.             if($this->version() > '4.1') {   
  17.                 global $charset$dbcharset;   
  18.                 $dbcharset = $dbcharset2 ? $dbcharset2 : $dbcharset;   
  19.                 $dbcharset = !$dbcharset && in_array(strtolower($charset), array('gbk''big5''utf-8')) ? str_replace('-'''$charset) : $dbcharset;   
  20.                 $serverset = $dbcharset ? 'character_set_connection='.$dbcharset.', character_set_results='.$dbcharset.', character_set_client=binary' : '';   
  21.                 $serverset .= $this->version() > '5.0.1' ? ((emptyempty($serverset) ? '' : ',').'sql_mode=\'\'') : '';   
  22.                 $serverset && mysql_query("SET $serverset"$this->link);   
  23.             }   
  24.             $dbname && @mysql_select_db($dbname$this->link);   
  25.         }   
  26.   
  27.     }   
  28.     //定义一个选择数据库的方法   
  29.     function select_db($dbname) {   
  30.         return mysql_select_db($dbname$this->link);   
  31.     }   
  32.     //定义一个数据库执行后的返回方法   
  33.     function fetch_array($query$result_type = MYSQL_ASSOC) {   
  34.         return mysql_fetch_array($query$result_type);   
  35.     }   
  36.     //定义一个方法,方法中返回fetch_array方法执行后的返回值   
  37.     function fetch_first($sql) {   
  38.         return $this->fetch_array($this->query($sql));   
  39.     }   
  40.     //定义一个方法,方法中返回result方法执行后的返回值   
  41.     function result_first($sql) {   
  42.         return $this->result($this->query($sql), 0);   
  43.     }   
  44.     //定义一个方法。方法中执行对数据库的操作。   
  45.     function query($sql$type = '') {   
  46.   
  47.         //数据库操作。。不明具体的判断。   
  48.         $func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?   
  49.             'mysql_unbuffered_query' : 'mysql_query';   
  50.         if(!($query = $func($sql$this->link))) {   
  51.             if(in_array($this->errno(), array(2006, 2013)) && substr($type, 0, 5) != 'RETRY') {   
  52.                 $this->close();   
  53.                 $this->connect($dbhost$dbuser$dbpw$dbname$pconnect, true, $dbcharset);   
  54.                 $this->query($sql'RETRY'.$type);   
  55.             } elseif($type != 'SILENT' && substr($type, 5) != 'SILENT') {   
  56.                 $this->halt('MySQL Query Error'$sql);   
  57.             }   
  58.         }   
  59.   
  60.         $this->querynum++;   
  61.         return $query;   
  62.     }   
  63.     //mysql_affected_rows -- 取得前一次 MySQL 操作所影响的记录行数   
  64.     function affected_rows() {   
  65.         return mysql_affected_rows($this->link);   
  66.     }   
  67.     //数据库的文本错误提示   
  68.     function error() {   
  69.         return (($this->link) ? mysql_error($this->link) : mysql_error());   
  70.     }   
  71.     //mysql_errno --  返回上一个 MySQL 操作中的错误信息的数字编码   
  72.     function errno() {   
  73.         return intval(($this->link) ? mysql_errno($this->link) : mysql_errno());   
  74.     }   
  75.     //返回数据库操作结果   
  76.     function result($query$row = 0) {   
  77.         $query = @mysql_result($query$row);   
  78.         return $query;   
  79.     }   
  80.     //返回数据库查询等操作的数目   
  81.     function num_rows($query) {   
  82.         $query = mysql_num_rows($query);   
  83.         return $query;   
  84.     }   
  85.     //mysql_num_fields-取得结果集中字段的数目   
  86.     function num_fields($query) {   
  87.         return mysql_num_fields($query);   
  88.     }   
  89.     //释放结果内存   
  90.     function free_result($query) {   
  91.         return mysql_free_result($query);   
  92.     }   
  93.     //mysql_insert_id --  取得上一步 INSERT 操作产生的 ID   
  94.     function insert_id() {   
  95.         return ($id = mysql_insert_id($this->link)) >= 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.     //mysql_fetch_field --  从结果集中取得列信息并作为对象返回   
  103.     function fetch_fields($query) {   
  104.         return mysql_fetch_field($query);   
  105.     }   
  106.     //获取版本信息,mysql_get_server_info()返回mysql服务器信息   
  107.     function version() {   
  108.         if(emptyempty($this->version)) {   
  109.             $this->version = mysql_get_server_info($this->link);   
  110.         }   
  111.         return $this->version;   
  112.     }   
  113.     //关闭链接   
  114.     function close() {   
  115.         return mysql_close($this->link);   
  116.     }   
  117.     //错误提示   
  118.     function halt($message = ''$sql = '') {   
  119.         return "run mysql have a error.";   
  120.     }   
  121. }  
posted @ 2012-08-27 18:12  马儿快跑  阅读(1422)  评论(0编辑  收藏  举报