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

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

<?php
/**
 * 数据库类
 * @filesource cls_mysql.php
 * @author 孙广锋
 * @version 孙广锋 20100204,1110
 */
class MysqlDb{
	var $version = '';
	var $querynum = 0;
	var $link;
	
	/**
	 * 注销实例
	 *
	 */
	function __destruct(){
		$this->close();
	}
	/**
	 * 连接数据库
	 *
	 * @param string $dbhost 数据库主机地址
	 * @param string $dbuser 数据库用户名
	 * @param string $dbpw 数据库密码
	 * @param string $dbname 数据库名称
	 * @param boolean $pconnect 是否开启持久连接
	 * @param boolean $halt 是否开启出错停止执行
	 */
	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("SET $serverset", $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 string $type 执行类型
	 * @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 resource $query
	 * @param unknown_type $result_type
	 * @return array
	 */
	function fetch_array($query, $result_type = MYSQL_ASSOC) {
		return mysql_fetch_array($query, $result_type);
	}
	/**
	 * 查询第1条数据
	 *
	 * @param string $sql SQL语句
	 * @return array
	 */
	function fetch_first($sql) {
		return $this->fetch_array($this->query($sql));
	}
	/**
	 * 函数从查询集中取得一行作为数字数组
	 *
	 * @param resource $query
	 * @return array
	 */
	function fetch_row($query) {
		$query = mysql_fetch_row($query);
		return $query;
	}
	/**
	 * 函数从结果集中取得列信息并作为对象返回。
	 *
	 * @param resource $query
	 * @return array
	 */
	function fetch_fields($query) {
		return mysql_fetch_field($query);
	}
	/**
	 * 根据查集获得指定行记录值
	 *
	 * @param resource $query 查询结
	 * @param int $row 行号
	 * @return string
	 */
	function result($query, $row) {
		$query = @mysql_result($query, $row);
		return $query;
	}
	/**
	 * 根据SQL语句查询第1行第1列值
	 *
	 * @param string $sql SQL语句
	 * @return string
	 */
	function result_first($sql) {
		return $this->result($this->query($sql), 0);
	}
	/**
	 * 根据查询集获得记录总数
	 *
	 * @param resource $query
	 * @return int
	 */
	function num_rows($query) {
		$query = mysql_num_rows($query);
		return $query;
	}
	/**
	 * 根据查询集获得字段数
	 *
	 * @param resource $query 查询集
	 * @return int
	 */
	function num_fields($query) {
		return mysql_num_fields($query);
	}
	/**
	 * 释放查询
	 *
	 * @param resource $query 查询集
	 * @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 string $sql 错误提示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);
		}
		return $this->version;
	}
	/**
	 * 释放连接
	 *
	 * @return boolean
	 */
	function close() {
		return mysql_close($this->link);
	}
	
	/**
	 * 资源文件转为数据集合
	 *
	 * @param resource $query 查询资源文件
	 * @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;
	}
}
?>
发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>