mysql主从数据库类

4 篇文章 0 订阅
<?php
/**
 * mysql.php 	MYSQL数据库操作类
 *
 * @author				马鑫亮
 * @lastmodify			2012-07-12
 */
 
 
 $MYSQL_CONF = array(
	"master" => array(
		"server" => "",
		"username" => "",
		"password" => "",
	),
	"slave" => array(
		"server" => "",
		"username" => "",
		"password" => "",
	),
);

class Mysql
{
	/**
	 * 静态单例数组
	 */
	static private $instance = array();
	
	/**
	 * 数据库链接资源符
	 */
	private $db = null;
	
	/**
	 * 主机名
	 */
	private $host = null;
	
	/**
	 * 用户名
	 */
	private $user = null;
	
	/**
	 * 数据库密码
	 */
	private $password = null;
	
	/**
	 * 查询操作的资源符
	 */
	private $res = null;
	
	private function __construct($host, $user, $password)
	{
		$this->host = $host;
		$this->user = $user;
		$this->password = $password;
	}

	/**
	 * 单例创建mysql主从对象
	 * @param $type 连接类型 主、从、主从
	 * @return	array	包括主从对象的数组
	 */
	static public function getInstance($type = "all")
	{
		global $MYSQL_CONF;
		
		if($type == "all")
		{
			self::get_master($MYSQL_CONF["master"]);
			self::get_slave($MYSQL_CONF["slave"]);
			
		}
		else if($type == "master")
		{
			self::get_master($MYSQL_CONF["master"]);
		}
		else if($type == "slave")
		{
			self::get_slave($MYSQL_CONF["slave"]);
		}
		
		return self::$instance;
	}
	
	/**
	 * 连接主库
	 * @param $master_conf 主库配置信息 
	 * @return void
	 */
	private function get_master($master_conf)
	{
		if(empty(self::$instance["master"]))
		{
			extract($master_conf);
			
			self::$instance["master"] = new Mysql($server, $username, $password);
			self::$instance["master"]->connect();
		}
	}
	
	/**
	 * 连接从库
	 * @param $slave_conf 从库配置信息
	 * @return void
	 */
	private function get_slave($slave_conf)
	{
		if(empty(self::$instance["slave"]))
		{
			extract($slave_conf);
			
			self::$instance["slave"] = new Mysql($server, $username, $password);
			self::$instance["slave"]->connect();
		}
	}
	
	
	/**
	 * 数据库链接
	 * @return	void
	 */
	private function connect()
	{
		$db_link = mysql_connect($this->host, $this->user, $this->password);
		$db_link ? ($this->db = $db_link) : die("Mysql connection is failed!");
	}
	

	/**
	 * 选择数据库
	 * @param $db_name 		数据库名
	 * @return bool		是否选择成功
	 */
	public function select_db($db_name)
	{
		return mysql_select_db($db_name, $this->db);
	} 
	
	/**
	 * 设置数据库编码
	 * @param $character 		编码
	 * @return bool		是否设置成功
	 */
	public function set_character($character = "UTF-8")
	{
		return mysql_set_charset($character, $this->db);
	}
	
	/**
	 * 插入操作
	 * @param $table_name	表名
	 * @param $data 		插入的数据,型如:array("name"=>"", "password"=>""⋯⋯)
	 * @return			插入成功返回插入id,否则返回false
	 */
	public function insert($table_name, $data)
	{
		if(!$table_name || !$data)
		{
			return false;
		}
		else
		{
			$sql = "INSERT INTO ".$table_name."(`".implode("`,`", array_keys($data))."`) VALUES('".implode("','", array_values($data))."')";
			$this->query($sql);
			
			return ($this->res) ? $this->get_insert_id : false;
		}
	}
	
	/**
	 * 更新操作
	 * @param $table_name	表名
	 * @param $set 		更新的数据,型如:array("key1='".$val1."'", "key2='".$val2."'"⋯⋯)
	 * @param $where 	更新条件为字符串
	 * @return	bool	是否更新成功
	 */
	public function update($table_name, $set, $where)
	{
		if(!$table_name || !$set || !$where)
		{
			return false;
		}
		else
		{
			$sql = "UPDATE ".$table_name." SET ".implode(", ", $set)."WHERE ".$where;
			$this->query($sql);
			
			return ($this->affected_rows >= 0) ? true : false;
		}
	}
	
	/**
	 * 删除操作
	 * @param $where 	删除条件为字符串
	 * @return	bool	是否删除成功
	 */
	public function delete($table_name, $where)
	{
		if(!$table_name || !$where)
		{
			return false;
		}
		else
		{
			$sql = "DELETE FROM ".$table_name." WHERE ".$where;
			$this->query($sql);
			
			return ($this->affected_rows >= 0) ? true : false;
		}
	}

	/**
	 * 释放与resource相关的内存
	 * @return bool
	 */
	 public function free_result()
	 {
		if($this->res)
		{
			return mysql_free_result($this->res);
		}	 
	 }

	/**
	 * 查询所有记录
	 * @param $table_name	表名
	 * @param $fields	要查询的字段array
	 * @param $where 	查询条件为字符串
	 * @param $orderby	排序条件
	 * @param $page		当前页
	 * @param $page_size	每页显示20条
	 * @return	array	查询结果集合
	 */
	public function getAll($table_name, $fields = array("*"), $where, $orderby = "", $page = 0, $page_size = 20)
	{
		$info = array();
		
		$order = ($orderby) ? " ORDER BY ".$orderby : "";
			
		if($page)
		{
			$offset = ($page - 1) * $page_size;
		}
		
		$sql = "SELECT ".implode(", ", $fields)." FROM ".$table_name." WHERE ".$where.$order.(($page) ? " LIMIT ".$offset.",".$page_size : "");
		$this->query($sql);
			
		if($this->get_num_rows($this->res) > 0)
		{
			while($row = mysql_fetch_assoc($this->res))
			{
				$info[] = $row;
			}
				
			$this->free_result();
		}
		
		return $info;
	}

	/**
	 * 查询单条数据
	 * @param $table_name	表名
	 * @param $fields	要查询的字段array
	 * @param $where 	查询条件为字符串
	 * @param $orderby	排序条件
	 * @return	array	返回单条记录
	 */
	public function getOne($table_name, $fields = array("*"), $where, $orderby = "")
	{
		$order = ($orderby) ? " ORDER BY ".$orderby : "";
		
		$sql = "SELECT ".implode(", ", $fields)." FROM ".$table_name." WHERE ".$where.$order." LIMIT 1";
		$this->query($sql);
		
		return ($this->get_num_rows($this->res)) ? mysql_fetch_assoc($this->res) : array();
	}
	
	/**
	 * 查询单条中某一字段
	 * @param $table_name	表名
	 * @param $field	要查询的字段名string
	 * @param $where 	查询条件为字符串
	 * @param $orderby	排序条件
	 * @return	string	返回单个字段
	 */
	public function getOneField($table_name, $field, $where, $orderby = "")
	{
		$order = ($orderby) ? " ORDER BY ".$orderby : "";
		
		$sql = "SELECT ".$field." FROM ".$table_name." WHERE ".$where.$order;
		$this->query($sql);
		
		return ($this->get_num_rows($this->res)) ? mysql_result($this->res, 0, $field) : "";
	}

	/**
	 * 执行sql
	 * @param $sql		sql语句
	 * @return void
	 */
	public function query($sql)
	{
		if($sql)
		{
			$this->res = mysql_query($sql, $this->db);
		}
	}
	
	/**
	 * 取得插入ID
	 * @return 	int
	 */
	public function get_insert_id()
	{
		return mysql_insert_id($this->db);
	}
	
	/**
	 * 取得操作影响的记录数
	 * @return 	int
	 */
	public function affected_rows()
	{
		return mysql_affected_rows($this->db);
	}
	
	/**
	 * 取得查询的记录数
	 * @return 	int
	 */
	public function get_num_rows()
	{
		return mysql_num_rows($this->res);
	}
	
	/**
	 * 关闭数据库链接
	 * @return 	bool
	 */
	public function close()
	{
		return mysql_close($this->db);
	}
}
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值