<?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);
}
}
?>