简单的MySQLDB类

  1 <?php
  2 error_reporting(E_ALL ^ E_DEPRECATED);
  3 
  4 //数据库操作类
  5 class MySQLDB{
  6 
  7     //属性--必要的信息
  8     private $_host;   //主机
  9     private $_port;   //端口
 10     private $_user;   //用户名
 11     private $_pass;   //密码
 12     private $_charset;//字符集
 13     private $_dbname; //默认数据库
 14 
 15     //属性--运行时生成
 16     public $_link;   //mysql link 资源
 17 
 18     private static $_instance;
 19     public static function getInstance($params=array()){
 20         if(!self::$_instance instanceof self){
 21             self::$_instance = new self($params);
 22         }
 23         return self::$_instance;
 24     }
 25     private function __clone(){}
 26 
 27     /*
 28      * 构造方法
 29      * @param $param=array() array 关联数组 需要六个属性值
 30      */
 31     private function __construct($params=array()){
 32         //初始化属性
 33         $this->_initParams($params);
 34         //连接数据库服务器
 35         $this->_connect();
 36         //设定字符集
 37         $this->_setCharset();
 38         //选择默认数据
 39         $this->_selectDB();
 40     }
 41 
 42     /*
 43      * 初始化数据库服务器参数
 44      */
 45     private function _initParams($params){
 46         $this->_host = isset($params['host'])?$params['host']:'127.0.0.1';       //本机
 47         $this->_port = isset($params['port'])?$params['port']:'3306';            //3306
 48         $this->_user = isset($params['user'])?$params['user']:'';                //匿名用户
 49         $this->_pass = isset($params['pass'])?$params['pass']:'';                //没有密码
 50         $this->_charset = isset($params['charset'])?$params['charset']:'utf8';   //utf8
 51         $this->_dbname = isset($params['dbname'])?$params['dbname']:'';          //表示不用选择默认数据库
 52     }
 53 
 54 
 55     /*
 56      * 连接数据库服务器
 57      */
 58     private function _connect(){
 59         //127.0.0.1:3306
 60         if($link = mysql_connect("$this->_host:$this->_port",$this->_user,$this->_pass)){
 61             //成功
 62             $this->_link = $link;
 63         }else{
 64             //失败,强制脚本结束,提示错误信息
 65             die("-_-!,连接数据库服务器失败,请确定连接选项");
 66         }
 67     }
 68 
 69     /*
 70      * 设定指定字符集
 71      */
 72     private function _setCharset(){
 73         $sql = "set names $this->_charset";
 74         if(mysql_query($sql,$this->_link)){
 75             //成功
 76         }else{
 77             //执行失败给出错误信息
 78             echo '-_-!SQL执行失败<br/>';
 79             echo '错误的SQL为:',$sql,'<br/>';
 80             echo '错误代码为:',mysql_errno($this->_link),'<br/>';
 81             echo '错误信息为:',mysql_error($this->_link);
 82             die;
 83         }
 84     }
 85 
 86     /*
 87      * 选择默认数据库
 88      * 如果没有指定,则不选择
 89      */
 90     private function _selectDB(){
 91         //判断是否需要选择默认数据库,表示不需要,防止为0
 92         if($this->_dbname !== ''){
 93             //不为空,才选择数据库
 94             $sql = "use `$this->_dbname`";
 95             if(mysql_query($sql,$this->_link)){
 96                 //成功
 97             }else{
 98                 //执行失败给出错误信息
 99                 echo '-_-!SQL执行失败<br/>';
100                 echo '错误的SQL为:',$sql,'<br/>';
101                 echo '错误代码为:',mysql_errno($this->_link),'<br/>';
102                 echo '错误信息为:',mysql_error($this->_link);
103                 die;
104             }
105         }
106     }
107 
108     /**
109      * 获得全部记录
110      *
111      * @param $sql string 查询类的SQL(select,show,desc)
112      *
113      * @return array 二维数组,记录的集合
114      */
115     public function fetchAll($sql){
116         //先执行
117         if(!$result = mysql_query($sql,$this->_link)){
118             //执行失败给出错误信息
119             echo '-_-!SQL执行失败<br/>';
120             echo '错误的SQL为:',$sql,'<br/>';
121             echo '错误代码为:',mysql_errno($this->_link),'<br/>';
122             echo '错误信息为:',mysql_error($this->_link);
123             die;
124         }
125         //获取数据
126         $rows = array();
127         while($row = mysql_fetch_assoc($result)){
128             $rows[] = $row;
129         }
130         //释放结果集
131         mysql_free_result($result);
132         //返回
133         return $rows;
134     }
135 
136     /**
137      * 获得一条记录
138      *
139      * @param $sql string 查询类的SQL(select,show,desc)
140      *
141      * @return array 一维数组,一条记录
142      */
143     public function fetchRow($sql){
144         //先执行
145         if(!$result = mysql_query($sql,$this->_link)){
146             //执行失败给出错误信息
147             echo '-_-!SQL执行失败<br/>';
148             echo '错误的SQL为:',$sql,'<br/>';
149             echo '错误代码为:',mysql_errno($this->_link),'<br/>';
150             echo '错误信息为:',mysql_error($this->_link);
151             die;
152         }
153         //获取数据
154         $row = mysql_fetch_assoc($result);
155         //释放结果集
156         mysql_free_result($result);
157         //返回
158         return $row;
159     }
160 
161     /**
162      * 获得一个数据
163      *
164      * @param $sql string 查询类的SQL(select,show,desc)
165      *
166      * @return string 唯一的数据 第一条记录的第一列
167      */
168     public function fetchColumn($sql){
169         //先执行
170         if(!$result = mysql_query($sql,$this->_link)){
171             //执行失败给出错误信息
172             echo '-_-!SQL执行失败<br/>';
173             echo '错误的SQL为:',$sql,'<br/>';
174             echo '错误代码为:',mysql_errno($this->_link),'<br/>';
175             echo '错误信息为:',mysql_error($this->_link);
176             die;
177         }
178         //获取数据
179         $row = mysql_fetch_row($result);
180         //释放结果集
181         mysql_free_result($result);
182         //返回
183         return $row[0];
184     }
185 
186 
187     /**
188      * 序列化时执行的方法
189      * @return array每个数组元素为一个需要被序列化的属性名
190      *
191      */
192     public function __sleep(){
193         return array('_host','_post','_user','_pass','_charset','_dbname');
194     }
195 
196     /*
197      * 反序列化时被执行
198      * 重新初始化工作
199      */
200     public function __wakeup(){
201         //连接数据库服务器
202         $this->_connect();
203         //设定连接字符集
204         $this->_setCharset();
205         //选择默认数据库
206         $this->_selectDB();
207     }
208 }

 

posted @ 2014-10-30 17:36  敲着键盘看风景  阅读(372)  评论(2编辑  收藏  举报