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 }