php数据库之 – 自认为不错的一个mysql类

一个自认为不错的php mysql 类,由discuz的mysql类整理而来的~

<?php
/**
 * 数据库类
 * @filesource cls_mysql.php
 * @author 孙广锋
 * @version 孙广锋 20100204,1110
 */
class MysqlDb{
	var version = '';
	varquerynum = 0;
	var link;
	
	/**
	 * 注销实例
	 *
	 */
	function __destruct(){this->close();
	}
	/**
	 * 连接数据库
	 *
	 * @param string dbhost 数据库主机地址
	 * @param stringdbuser 数据库用户名
	 * @param string dbpw 数据库密码
	 * @param stringdbname 数据库名称
	 * @param boolean pconnect 是否开启持久连接
	 * @param booleanhalt 是否开启出错停止执行
	 */
	function connect(dbhost,dbuser, dbpw,dbname = '', pconnect = 0,halt = TRUE) {
		func = empty(pconnect) ? 'mysql_connect' : 'mysql_pconnect';
		if(!this->link = @func(dbhost,dbuser, dbpw)){halt && this->halt('Can not connect to MySQL server');
		}else{
			if(this->version() > '4.1'){
				global charset,dbcharset;
				dbcharset = !dbcharset && in_array(strtolower(charset), array('gbk', 'big5', 'utf-8')) ? str_replace('-', '',charset) : dbcharset;serverset = dbcharset ? 'character_set_connection='.dbcharset.', character_set_results='.dbcharset.', character_set_client=binary' : '';serverset .= this->version()>'5.0.1' ? ((empty(serverset) ? '' : ',').'sql_mode=\'\'') : '';
				serverset && mysql_query("SETserverset", this->link);
			}dbname && @mysql_select_db(dbname,this->link);
		}
	}
	/**
	 * 切换选择数据库
	 *
	 * @param string dbname 数据库名称
	 * @return boolean
	 */
	function select_db(dbname) {
		return mysql_select_db(dbname,this->link);
	}
	/**
	 * 执行查询,返回查询集资源
	 *
	 * @param string sql SQL语句
	 * @param stringtype 执行类型
	 * @return resource/boolean
	 */
	function query(sql,type = '') {
		func =type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?
			'mysql_unbuffered_query' : 'mysql_query';
		if(!(query =func(sql,this->link))) {
			if(in_array(this->errno(), array(2006, 2013)) && substr(type, 0, 5) != 'RETRY') {
				this->halt('Can not connect to MySQL server');
			} elseif(type != 'SILENT' && substr(type, 5) != 'SILENT'){this->halt('MySQL Query Error', sql);
			}
		}this->querynum++;
		return query;
	}
	/**
	 * 
	 * 根据查询获得结果集(以堆栈方式弹出第1条)
	 * @param resourcequery
	 * @param unknown_type result_type
	 * @return array
	 */
	function fetch_array(query, result_type = MYSQL_ASSOC) {
		return mysql_fetch_array(query, result_type);
	}
	/**
	 * 查询第1条数据
	 *
	 * @param stringsql SQL语句
	 * @return array
	 */
	function fetch_first(sql) {
		returnthis->fetch_array(this->query(sql));
	}
	/**
	 * 函数从查询集中取得一行作为数字数组
	 *
	 * @param resource query
	 * @return array
	 */
	function fetch_row(query) {
		query = mysql_fetch_row(query);
		return query;
	}
	/**
	 * 函数从结果集中取得列信息并作为对象返回。
	 *
	 * @param resourcequery
	 * @return array
	 */
	function fetch_fields(query) {
		return mysql_fetch_field(query);
	}
	/**
	 * 根据查集获得指定行记录值
	 *
	 * @param resource query 查询结
	 * @param introw 行号
	 * @return string
	 */
	function result(query,row) {
		query = @mysql_result(query, row);
		returnquery;
	}
	/**
	 * 根据SQL语句查询第1行第1列值
	 *
	 * @param string sql SQL语句
	 * @return string
	 */
	function result_first(sql) {
		return this->result(this->query(sql), 0);
	}
	/**
	 * 根据查询集获得记录总数
	 *
	 * @param resourcequery
	 * @return int
	 */
	function num_rows(query) {query = mysql_num_rows(query);
		returnquery;
	}
	/**
	 * 根据查询集获得字段数
	 *
	 * @param resource query 查询集
	 * @return int
	 */
	function num_fields(query) {
		return mysql_num_fields(query);
	}
	/**
	 * 释放查询
	 *
	 * @param resourcequery 查询集
	 * @return boolean
	 */
	function free_result(query) {
		return mysql_free_result(query);
	}
	/**
	 * 函数返回前一次操作所影响的记录行数。
	 *
	 * @return int
	 */
	function affected_rows() {
		return mysql_affected_rows(this->link);
	}
	/**
	 * 获得最后一次插入的自动编号
	 *
	 * @return int
	 */
	function insert_id() {
		return (id = mysql_insert_id(this->link)) >= 0 ?id : this->result(this->query("SELECT last_insert_id()"), 0);
	}
	/**
	 * 获得错误号
	 *
	 * @return int
	 */
	function errno() {
		return intval((this->link) ? mysql_errno(this->link) : mysql_errno());
	}
	/**
	 * 返回MYSQL错误
	 *
	 * @return string
	 */
	function error() {
		return ((this->link) ? mysql_error(this->link) : mysql_error());
	}
	/**
	 * 错误输出函数
	 *
	 * @param string message 错误提示消息
	 * @param stringsql 错误提示SQL语句
	 */
	function halt(message = '',sql = '') {
		echo 'SQL Error:<br />'.message.'<br />'.sql;
	}
	/**
	 * 获取当前Mysql版本号
	 *
	 * @return float
	 */
	function version() {
		if(empty(this->version)) {this->version = mysql_get_server_info(this->link);
		}
		returnthis->version;
	}
	/**
	 * 释放连接
	 *
	 * @return boolean
	 */
	function close() {
		return mysql_close(this->link);
	}
	
	/**
	 * 资源文件转为数据集合
	 *
	 * @param resourcequery 查询资源文件
	 * @param string key_field 返回数组key所在字段
	 * @return array
	 */
	function fetch_all(query,key_field=''){list = array();
		while (temp =this->fetch_array(query)) {
			 (key_field=='' || !isset(temp[key_field])) ? array_push(list,temp) : list[temp[key_field]] =temp ;
		}	
		return $list;
	}
}
?>