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
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 &amp;&amp; $this->halt('Can not connect to MySQL server');
32.}
33.} else {
34.if(!$this->link = @mysql_connect($dbhost, $dbuser, $dbpw, 1)) {//建立数据库连接
35.$halt &amp;&amp; $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.?>

posted on 2011-05-31 14:07  文淇的技术日记  阅读(218)  评论(0)    收藏  举报

导航