
<?php
error_reporting(E_ALL ^ E_DEPRECATED); //数据库操作类
class MySQLDB{ //属性--必要的信息
private $_host; //主机
private $_port; //端口
private $_user; //用户名
private $_pass; //密码
private $_charset;//字符集
private $_dbname; //默认数据库 //属性--运行时生成
public $_link; //mysql link 资源 private static $_instance;
public static function getInstance($params=array()){
if(!self::$_instance instanceof self){
self::$_instance = new self($params);
}
return self::$_instance;
}
private function __clone(){} /*
* 构造方法
* @param $param=array() array 关联数组 需要六个属性值
*/
private function __construct($params=array()){
//初始化属性
$this->_initParams($params);
//连接数据库服务器
$this->_connect();
//设定字符集
$this->_setCharset();
//选择默认数据
$this->_selectDB();
} /*
* 初始化数据库服务器参数
*/
private function _initParams($params){
$this->_host = isset($params['host'])?$params['host']:'127.0.0.1'; //本机
$this->_port = isset($params['port'])?$params['port']:'3306'; //
$this->_user = isset($params['user'])?$params['user']:''; //匿名用户
$this->_pass = isset($params['pass'])?$params['pass']:''; //没有密码
$this->_charset = isset($params['charset'])?$params['charset']:'utf8'; //utf8
$this->_dbname = isset($params['dbname'])?$params['dbname']:''; //表示不用选择默认数据库
} /*
* 连接数据库服务器
*/
private function _connect(){
//127.0.0.1:3306
if($link = mysql_connect("$this->_host:$this->_port",$this->_user,$this->_pass)){
//成功
$this->_link = $link;
}else{
//失败,强制脚本结束,提示错误信息
die("-_-!,连接数据库服务器失败,请确定连接选项");
}
} /*
* 设定指定字符集
*/
private function _setCharset(){
$sql = "set names $this->_charset";
if(mysql_query($sql,$this->_link)){
//成功
}else{
//执行失败给出错误信息
echo '-_-!SQL执行失败<br/>';
echo '错误的SQL为:',$sql,'<br/>';
echo '错误代码为:',mysql_errno($this->_link),'<br/>';
echo '错误信息为:',mysql_error($this->_link);
die;
}
} /*
* 选择默认数据库
* 如果没有指定,则不选择
*/
private function _selectDB(){
//判断是否需要选择默认数据库,表示不需要,防止为0
if($this->_dbname !== ''){
//不为空,才选择数据库
$sql = "use `$this->_dbname`";
if(mysql_query($sql,$this->_link)){
//成功
}else{
//执行失败给出错误信息
echo '-_-!SQL执行失败<br/>';
echo '错误的SQL为:',$sql,'<br/>';
echo '错误代码为:',mysql_errno($this->_link),'<br/>';
echo '错误信息为:',mysql_error($this->_link);
die;
}
}
} /**
* 获得全部记录
*
* @param $sql string 查询类的SQL(select,show,desc)
*
* @return array 二维数组,记录的集合
*/
public function fetchAll($sql){
//先执行
if(!$result = mysql_query($sql,$this->_link)){
//执行失败给出错误信息
echo '-_-!SQL执行失败<br/>';
echo '错误的SQL为:',$sql,'<br/>';
echo '错误代码为:',mysql_errno($this->_link),'<br/>';
echo '错误信息为:',mysql_error($this->_link);
die;
}
//获取数据
$rows = array();
while($row = mysql_fetch_assoc($result)){
$rows[] = $row;
}
//释放结果集
mysql_free_result($result);
//返回
return $rows;
} /**
* 获得一条记录
*
* @param $sql string 查询类的SQL(select,show,desc)
*
* @return array 一维数组,一条记录
*/
public function fetchRow($sql){
//先执行
if(!$result = mysql_query($sql,$this->_link)){
//执行失败给出错误信息
echo '-_-!SQL执行失败<br/>';
echo '错误的SQL为:',$sql,'<br/>';
echo '错误代码为:',mysql_errno($this->_link),'<br/>';
echo '错误信息为:',mysql_error($this->_link);
die;
}
//获取数据
$row = mysql_fetch_assoc($result);
//释放结果集
mysql_free_result($result);
//返回
return $row;
} /**
* 获得一个数据
*
* @param $sql string 查询类的SQL(select,show,desc)
*
* @return string 唯一的数据 第一条记录的第一列
*/
public function fetchColumn($sql){
//先执行
if(!$result = mysql_query($sql,$this->_link)){
//执行失败给出错误信息
echo '-_-!SQL执行失败<br/>';
echo '错误的SQL为:',$sql,'<br/>';
echo '错误代码为:',mysql_errno($this->_link),'<br/>';
echo '错误信息为:',mysql_error($this->_link);
die;
}
//获取数据
$row = mysql_fetch_row($result);
//释放结果集
mysql_free_result($result);
//返回
return $row[0];
} /**
* 序列化时执行的方法
* @return array每个数组元素为一个需要被序列化的属性名
*
*/
public function __sleep(){
return array('_host','_post','_user','_pass','_charset','_dbname');
} /*
* 反序列化时被执行
* 重新初始化工作
*/
public function __wakeup(){
//连接数据库服务器
$this->_connect();
//设定连接字符集
$this->_setCharset();
//选择默认数据库
$this->_selectDB();
}
}