UCHome的数据库操作类,相对来说还是比较容易让人理解的
代码
1 <?php
2 /*
3 [UCenter Home] (C) 2007-2008 Comsenz Inc.
4 $Id: class_mysql.php 2009-10-22 1:15:00
5 @author ymaozi
6 @copyright http://www.codedesign.cn
7 @uchome源码交流QQ群:83400263
8 */
9
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 }
38
39 <span id="more-106"></span>
40
41 if($this->version() > '4.1') {
42 if($this->charset) {
43 @mysql_query("SET character_set_connection=$this->charset, character_set_results=$this->charset, character_set_client=binary", $this->link);
44 }
45 if($this->version() > '5.0.1') {
46 @mysql_query("SET sql_mode=''", $this->link);
47 }
48 }
49 if($dbname) {
50 @mysql_select_db($dbname, $this->link);
51 }
52 }
53 /**
54 * 选择数据库
55 * @param string $dbname 数据库名
56 * @return bool
57 */
58 function select_db($dbname) {
59 return mysql_select_db($dbname, $this->link);
60 }
61
62 /**
63 * 获取查询的数组
64 * @param object $query
65 * @param string $result_type MYSQL_ASSOC 只得到关联索引,MYSQL_NUM 只得到数字索引
66 * @return array
67 */
68 function fetch_array($query, $result_type = MYSQL_ASSOC) {
69 return mysql_fetch_array($query, $result_type);
70 }
71
72 /**
73 * 执行一条sql语句
74 * @param string $sql 要执行的sql语句
75 * @param string $type 如果$type为UNBUFFERED:则执行mysql_unbuffered_query();他与mysql_query的区别是,执行后不获取和缓存结果的行
76 * @return object
77 */
78 function query($sql, $type = '') {
79 if(D_BUG) {
80 global $_SGLOBAL;
81 $sqlstarttime = $sqlendttime = 0; //sql开始时间与结束时间
82 $mtime = explode(' ', microtime());
83 $sqlstarttime = number_format(($mtime[1] + $mtime[0] - $_SGLOBAL['supe_starttime']), 6) * 1000;
84 }
85 //如果定义$type='UNBUFFERED' 则执行mysql_unbuffered_query()函数
86 $func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?
87 'mysql_unbuffered_query' : 'mysql_query';
88 if(!($query = $func($sql, $this->link)) && $type != 'SILENT') {
89 $this->halt('MySQL Query Error', $sql);
90 }
91 if(D_BUG) {
92 $mtime = explode(' ', microtime());
93 $sqlendttime = number_format(($mtime[1] + $mtime[0] - $_SGLOBAL['supe_starttime']), 6) * 1000;
94 $sqltime = round(($sqlendttime - $sqlstarttime), 3);//获取php的结束时间
95
96 $explain = array();
97 $info = mysql_info();//取得最近一条查询的信息
98 if($query && preg_match("/^(select )/i", $sql)) {
99 $explain = mysql_fetch_assoc(mysql_query('EXPLAIN '.$sql, $this->link));
100 }
101 $_SGLOBAL['debug_query'][] = array('sql'=>$sql, 'time'=>$sqltime, 'info'=>$info, 'explain'=>$explain);
102 }
103 $this->querynum++; //将执行的query数加1
104 return $query;
105 }
106 /**
107 * 取得前一次 MySQL 操作所影响的记录行数
108 * @return int
109 */
110 function affected_rows() {
111 return mysql_affected_rows($this->link);
112 }
113 /**
114 * 返回上一个 MySQL 操作产生的文本错误信息
115 * @return string
116 */
117 function error() {
118 return (($this->link) ? mysql_error($this->link) : mysql_error());
119 }
120 /**
121 * 返回上一个 MySQL 操作中的错误信息的数字编码
122 * @return int
123 */
124 function errno() {
125 return intval(($this->link) ? mysql_errno($this->link) : mysql_errno());
126 }
127 /**
128 * 取指定的结果集
129 * @param object $query
130 * @param int $row
131 * @return string
132 */
133 function result($query, $row) {
134 $query = @mysql_result($query, $row);
135 return $query;
136 }
137 /**
138 * 取得结果集的行数
139 * @param object $query
140 * @return int
141 */
142 function num_rows($query) {
143 $query = mysql_num_rows($query);
144 return $query;
145 }
146 /**
147 * 取得字段数
148 * @param object $query
149 * @return int
150 */
151 function num_fields($query) {
152 return mysql_num_fields($query);
153 }
154 /**
155 * 释放结果内存
156 * @param object $query
157 * @return bool
158 */
159 function free_result($query) {
160 return mysql_free_result($query);
161 }
162 /**
163 * 取得上一步 INSERT 操作产生的 ID
164 * @return int
165 */
166 function insert_id() {
167 return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);
168 }
169 /**
170 * 从查询语句中取一条记录
171 * @param object $query
172 * @return array
173 */
174 function fetch_row($query) {
175 $query = mysql_fetch_row($query);
176 return $query;
177 }
178 /**
179 * 从结果集中取得列信息
180 * @param object $query
181 * @return object
182 */
183 function fetch_fields($query) {
184 return mysql_fetch_field($query);
185 }
186 /**
187 * 取得 MySQL 服务器信息
188 * @return string
189 */
190 function version() {
191 return mysql_get_server_info($this->link);
192 }
193 /**
194 * 关闭 MySQL 连接
195 * @return bool
196 */
197 function close() {
198 return mysql_close($this->link);
199 }
200 /**
201 * 执行错误时,弹出的信息窗口
202 * @param string $message
203 * @param string $sql
204 */
205 function halt($message = '', $sql = '') {
206 $dberror = $this->error();//获取错误提示字符串
207 $dberrno = $this->errno();//获取错误信息的数字编码
208 $help_link = "http://faq.comsenz.com/?type=mysql& dberrno=".rawurlencode($dberrno)."&dberror=".rawurlencode($dberror); //rawurlencode();对 URL 进行编码
209 echo "<div style=\"position:absolute;font-size:11px;font-family:verdana,arial;background:#EBEBEB;padding:0.5em;\">
210 <b>MySQL Error</b><br>
211 <b>Message</b>: $message<br>
212 <b>SQL</b>: $sql<br>
213 <b>Error</b>: $dberror<br>
214 <b>Errno.</b>: $dberrno<br>
215 <a href=\"$help_link\" target=\"_blank\">Click here to seek help.</a>
216 </div>"; //输出错误的信息
217 exit();
218 }
219 }
220
221 ?>
222
2 /*
3 [UCenter Home] (C) 2007-2008 Comsenz Inc.
4 $Id: class_mysql.php 2009-10-22 1:15:00
5 @author ymaozi
6 @copyright http://www.codedesign.cn
7 @uchome源码交流QQ群:83400263
8 */
9
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 }
38
39 <span id="more-106"></span>
40
41 if($this->version() > '4.1') {
42 if($this->charset) {
43 @mysql_query("SET character_set_connection=$this->charset, character_set_results=$this->charset, character_set_client=binary", $this->link);
44 }
45 if($this->version() > '5.0.1') {
46 @mysql_query("SET sql_mode=''", $this->link);
47 }
48 }
49 if($dbname) {
50 @mysql_select_db($dbname, $this->link);
51 }
52 }
53 /**
54 * 选择数据库
55 * @param string $dbname 数据库名
56 * @return bool
57 */
58 function select_db($dbname) {
59 return mysql_select_db($dbname, $this->link);
60 }
61
62 /**
63 * 获取查询的数组
64 * @param object $query
65 * @param string $result_type MYSQL_ASSOC 只得到关联索引,MYSQL_NUM 只得到数字索引
66 * @return array
67 */
68 function fetch_array($query, $result_type = MYSQL_ASSOC) {
69 return mysql_fetch_array($query, $result_type);
70 }
71
72 /**
73 * 执行一条sql语句
74 * @param string $sql 要执行的sql语句
75 * @param string $type 如果$type为UNBUFFERED:则执行mysql_unbuffered_query();他与mysql_query的区别是,执行后不获取和缓存结果的行
76 * @return object
77 */
78 function query($sql, $type = '') {
79 if(D_BUG) {
80 global $_SGLOBAL;
81 $sqlstarttime = $sqlendttime = 0; //sql开始时间与结束时间
82 $mtime = explode(' ', microtime());
83 $sqlstarttime = number_format(($mtime[1] + $mtime[0] - $_SGLOBAL['supe_starttime']), 6) * 1000;
84 }
85 //如果定义$type='UNBUFFERED' 则执行mysql_unbuffered_query()函数
86 $func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?
87 'mysql_unbuffered_query' : 'mysql_query';
88 if(!($query = $func($sql, $this->link)) && $type != 'SILENT') {
89 $this->halt('MySQL Query Error', $sql);
90 }
91 if(D_BUG) {
92 $mtime = explode(' ', microtime());
93 $sqlendttime = number_format(($mtime[1] + $mtime[0] - $_SGLOBAL['supe_starttime']), 6) * 1000;
94 $sqltime = round(($sqlendttime - $sqlstarttime), 3);//获取php的结束时间
95
96 $explain = array();
97 $info = mysql_info();//取得最近一条查询的信息
98 if($query && preg_match("/^(select )/i", $sql)) {
99 $explain = mysql_fetch_assoc(mysql_query('EXPLAIN '.$sql, $this->link));
100 }
101 $_SGLOBAL['debug_query'][] = array('sql'=>$sql, 'time'=>$sqltime, 'info'=>$info, 'explain'=>$explain);
102 }
103 $this->querynum++; //将执行的query数加1
104 return $query;
105 }
106 /**
107 * 取得前一次 MySQL 操作所影响的记录行数
108 * @return int
109 */
110 function affected_rows() {
111 return mysql_affected_rows($this->link);
112 }
113 /**
114 * 返回上一个 MySQL 操作产生的文本错误信息
115 * @return string
116 */
117 function error() {
118 return (($this->link) ? mysql_error($this->link) : mysql_error());
119 }
120 /**
121 * 返回上一个 MySQL 操作中的错误信息的数字编码
122 * @return int
123 */
124 function errno() {
125 return intval(($this->link) ? mysql_errno($this->link) : mysql_errno());
126 }
127 /**
128 * 取指定的结果集
129 * @param object $query
130 * @param int $row
131 * @return string
132 */
133 function result($query, $row) {
134 $query = @mysql_result($query, $row);
135 return $query;
136 }
137 /**
138 * 取得结果集的行数
139 * @param object $query
140 * @return int
141 */
142 function num_rows($query) {
143 $query = mysql_num_rows($query);
144 return $query;
145 }
146 /**
147 * 取得字段数
148 * @param object $query
149 * @return int
150 */
151 function num_fields($query) {
152 return mysql_num_fields($query);
153 }
154 /**
155 * 释放结果内存
156 * @param object $query
157 * @return bool
158 */
159 function free_result($query) {
160 return mysql_free_result($query);
161 }
162 /**
163 * 取得上一步 INSERT 操作产生的 ID
164 * @return int
165 */
166 function insert_id() {
167 return ($id = mysql_insert_id($this->link)) >= 0 ? $id : $this->result($this->query("SELECT last_insert_id()"), 0);
168 }
169 /**
170 * 从查询语句中取一条记录
171 * @param object $query
172 * @return array
173 */
174 function fetch_row($query) {
175 $query = mysql_fetch_row($query);
176 return $query;
177 }
178 /**
179 * 从结果集中取得列信息
180 * @param object $query
181 * @return object
182 */
183 function fetch_fields($query) {
184 return mysql_fetch_field($query);
185 }
186 /**
187 * 取得 MySQL 服务器信息
188 * @return string
189 */
190 function version() {
191 return mysql_get_server_info($this->link);
192 }
193 /**
194 * 关闭 MySQL 连接
195 * @return bool
196 */
197 function close() {
198 return mysql_close($this->link);
199 }
200 /**
201 * 执行错误时,弹出的信息窗口
202 * @param string $message
203 * @param string $sql
204 */
205 function halt($message = '', $sql = '') {
206 $dberror = $this->error();//获取错误提示字符串
207 $dberrno = $this->errno();//获取错误信息的数字编码
208 $help_link = "http://faq.comsenz.com/?type=mysql& dberrno=".rawurlencode($dberrno)."&dberror=".rawurlencode($dberror); //rawurlencode();对 URL 进行编码
209 echo "<div style=\"position:absolute;font-size:11px;font-family:verdana,arial;background:#EBEBEB;padding:0.5em;\">
210 <b>MySQL Error</b><br>
211 <b>Message</b>: $message<br>
212 <b>SQL</b>: $sql<br>
213 <b>Error</b>: $dberror<br>
214 <b>Errno.</b>: $dberrno<br>
215 <a href=\"$help_link\" target=\"_blank\">Click here to seek help.</a>
216 </div>"; //输出错误的信息
217 exit();
218 }
219 }
220
221 ?>
222