UCHome中数据库操作类(class_mysql.php)页面的代码分析
UCHome的数据库操作类,相对来说还是比较容易让人理解的
01.<?php 02./* 03.[UCenter Home] (C) 2007-2008 Comsenz Inc. 04.$Id: class_mysql.php 2009-10-22 1:15:00 05.@author ymaozi 06.@copyright http://www.codedesign.cn 07.@uchome源码交流QQ群:83400263 08.*/09. 10.if(!defined('IN_UCHOME')) { 11.exit('Access Denied'); 12.} 13. 14.class dbstuff { 15.var $querynum = 0; 16.var $link; 17.var $charset; 18. 19./** 20.* 建立数据库连接 21.* @param string $dbhost 22.* @param string $dbuser 23.* @param string $dbpw 24.* @param string $dbname 25.* @param int $pconnect 26.* @param bool $halt 27.*/28.function connect($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0, $halt = TRUE) { 29.if($pconnect) {//是否采用了持久连接, 30.if(!$this->link = @mysql_pconnect($dbhost, $dbuser, $dbpw)) {//建立永久连接,永久连接不能通过mysql_close关闭 31.$halt && $this->halt('Can not connect to MySQL server'); 32.} 33.} else { 34.if(!$this->link = @mysql_connect($dbhost, $dbuser, $dbpw, 1)) {//建立数据库连接 35.$halt && $this->halt('Can not connect to MySQL server'); 36.} 37.}001.<span id="more-106"></span> 002. 003.if($this->version() > '4.1') { 004.if($this->charset) { 005.@mysql_query("SET character_set_connection=$this->charset, character_set_results=$this->charset, character_set_client=binary", $this->link); 006.} 007.if($this->version() > '5.0.1') { 008.@mysql_query("SET sql_mode=''", $this->link); 009.} 010.} 011.if($dbname) { 012.@mysql_select_db($dbname, $this->link); 013.} 014.} 015./** 016.* 选择数据库 017.* @param string $dbname 数据库名 018.* @return bool 019.*/020.function select_db($dbname) { 021.return mysql_select_db($dbname, $this->link); 022.} 023. 024./** 025.* 获取查询的数组 026.* @param object $query 027.* @param string $result_type MYSQL_ASSOC 只得到关联索引,MYSQL_NUM 只得到数字索引 028.* @return array 029.*/030.function fetch_array($query, $result_type = MYSQL_ASSOC) { 031.return mysql_fetch_array($query, $result_type); 032.} 033. 034./** 035.* 执行一条sql语句 036.* @param string $sql 要执行的sql语句 037.* @param string $type 如果$type为UNBUFFERED:则执行mysql_unbuffered_query();他与mysql_query的区别是,执行后不获取和缓存结果的行 038.* @return object 039.*/040.function query($sql, $type = '') { 041.if(D_BUG) { 042.global $_SGLOBAL; 043.$sqlstarttime = $sqlendttime = 0; //sql开始时间与结束时间 044.$mtime = explode(' ', microtime()); 045.$sqlstarttime = number_format(($mtime[1] + $mtime[0] - $_SGLOBAL['supe_starttime']), 6) * 1000; 046.} 047.//如果定义$type='UNBUFFERED' 则执行mysql_unbuffered_query()函数 048.$func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ? 049.'mysql_unbuffered_query' : 'mysql_query'; 050.if(!($query = $func($sql, $this->link)) && $type != 'SILENT') { 051.$this->halt('MySQL Query Error', $sql); 052.} 053.if(D_BUG) { 054.$mtime = explode(' ', microtime()); 055.$sqlendttime = number_format(($mtime[1] + $mtime[0] - $_SGLOBAL['supe_starttime']), 6) * 1000; 056.$sqltime = round(($sqlendttime - $sqlstarttime), 3);//获取php的结束时间 057. 058.$explain = array(); 059.$info = mysql_info();//取得最近一条查询的信息 060.if($query && preg_match("/^(select )/i", $sql)) { 061.$explain = mysql_fetch_assoc(mysql_query('EXPLAIN '.$sql, $this->link)); 062.} 063.$_SGLOBAL['debug_query'][] = array('sql'=>$sql, 'time'=>$sqltime, 'info'=>$info, 'explain'=>$explain); 064.} 065.$this->querynum++; //将执行的query数加1 066.return $query; 067.} 068./** 069.* 取得前一次 MySQL 操作所影响的记录行数 070.* @return int 071.*/072.function affected_rows() { 073.return mysql_affected_rows($this->link); 074.} 075./** 076.* 返回上一个 MySQL 操作产生的文本错误信息 077.* @return string 078.*/079.function error() { 080.return (($this->link) ? mysql_error($this->link) : mysql_error()); 081.} 082./** 083.* 返回上一个 MySQL 操作中的错误信息的数字编码 084.* @return int 085.*/086.function errno() { 087.return intval(($this->link) ? mysql_errno($this->link) : mysql_errno()); 088.} 089./** 090.* 取指定的结果集 091.* @param object $query 092.* @param int $row 093.* @return string 094.*/095.function result($query, $row) { 096.$query = @mysql_result($query, $row); 097.return $query; 098.} 099./** 100.* 取得结果集的行数 101.* @param object $query 102.* @return int 103.*/104.function num_rows($query) { 105.$query = mysql_num_rows($query); 106.return $query; 107.} 108./** 109.* 取得字段数 110.* @param object $query 111.* @return int 112.*/113.function num_fields($query) { 114.return mysql_num_fields($query); 115.} 116./** 117.* 释放结果内存 118.* @param object $query 119.* @return bool 120.*/121.function free_result($query) { 122.return mysql_free_result($query); 123.} 124./** 125.* 取得上一步 INSERT 操作产生的 ID 126.* @return int 127.*/128.function insert_id() { 129.return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0); 130.} 131./** 132.* 从查询语句中取一条记录 133.* @param object $query 134.* @return array 135.*/136.function fetch_row($query) { 137.$query = mysql_fetch_row($query); 138.return $query; 139.} 140./** 141.* 从结果集中取得列信息 142.* @param object $query 143.* @return object 144.*/145.function fetch_fields($query) { 146.return mysql_fetch_field($query); 147.} 148./** 149.* 取得 MySQL 服务器信息 150.* @return string 151.*/152.function version() { 153.return mysql_get_server_info($this->link); 154.} 155./** 156.* 关闭 MySQL 连接 157.* @return bool 158.*/159.function close() { 160.return mysql_close($this->link); 161.} 162./** 163.* 执行错误时,弹出的信息窗口 164.* @param string $message 165.* @param string $sql 166.*/167.function halt($message = '', $sql = '') { 168.$dberror = $this->error();//获取错误提示字符串 169.$dberrno = $this->errno();//获取错误信息的数字编码 170.$help_link = "http://faq.comsenz.com/?type=mysql&; dberrno=".rawurlencode($dberrno)."&dberror=".rawurlencode($dberror); //rawurlencode();对 URL 进行编码 171.echo "<div style=\"position:absolute;font-size:11px;font-family:verdana,arial;background:#EBEBEB;padding:0.5em;\"> 172.<b>MySQL Error</b><br> 173.<b>Message</b>: $message<br> 174.<b>SQL</b>: $sql<br> 175.<b>Error</b>: $dberror<br> 176.<b>Errno.</b>: $dberrno<br> 177.<a href=\"$help_link\" target=\"_blank\">Click here to seek help.</a> 178.</div>"; //输出错误的信息 179.exit(); 180.} 181.} 182. 183.?>
浙公网安备 33010602011771号