UCHome中数据库操作类(class_mysql.php)页面的代码分析

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 

 

 

 

你可能感兴趣的:(mysql)