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 & 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 }
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 & 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 }
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