PHP用来操作MySQL数据库的类

LAMP或者LNMP架构,PHP和MySQL数据库的联动,尤其是频繁操作不是很方便(貌似所有的语言都差不多-_-!!)。通用的做法就是将平常用到的操作查询、更新、插入、删除等操作封装到一个类里面,可以方便对数据库进行操作。下面是我项目中用到的类,参考了不少的资料。
用配置文件的方法可以灵活的配置不同的数据库连接,配置文件mysqldb.conf.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php 
$db_config["hostname"] = "xxx.xxx.xxx.xxx:x3306";
//服务器地址,使用非标准端口需要指定端口
$db_config["username"] = "xxxxxx";
//数据库用户名
$db_config["password"] = "************";
//数据库密码
$db_config["database"] = "xxxxxx";
//数据库名称
$db_config["charset"] = "utf8";
//数据库编码
$db_config["pconnect"] = 1;
//开启持久连接
$db_config["log"] = 1;
//开启日志
$db_config["logfilepath"] = '/opt/log/mysqldb.php.log';

mysqlDB类用来操作数据库的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
<?php 
Class mysqlDB {
private $link_id;
private $handle;
private $is_log;
private $time;

//构造函数
public function __construct() {
$this->time = $this->microtime_float();
require_once("/xxx/xxxx/conf/mysqldb.config.php");
$this->connect($db_config["hostname"], $db_config["username"], $db_config["password"], $db_config["database"], $db_config["pconnect"]);
$this->is_log = $db_config["log"];
if($this->is_log){
$handle = fopen("/opt/log/mysqldb.php.log", "a+");
$this->handle=$handle;
}
}

//连接数据库
public function connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect = 0,$charset='utf8') {
if( $pconnect==0 ) {
$this->link_id = @mysql_connect($dbhost, $dbuser, $dbpw, true);
if(!$this->link_id){
$this->halt("数据库连接失败");
}
} else {
$this->link_id = @mysql_pconnect($dbhost, $dbuser, $dbpw);
if(!$this->link_id){
$this->halt("数据库持久连接失败");
}
}
if(!@mysql_select_db($dbname,$this->link_id)) {
$this->halt('数据库选择失败');
}
@mysql_query("set names ".$charset);
}

//查询
public function query($sql) {
$this->write_log("查询 ".$sql);
$query = mysql_query($sql);
if(!$query) $this->halt('Query Error: ' . $sql);
return $query;
}

//获取查询条件的一条记录(MYSQL_ASSOC,MYSQL_NUM,MYSQL_BOTH)
public function get_one($sql,$result_type = MYSQL_ASSOC) {
$query = $this->query($sql);
$rt = mysql_fetch_array($query,$result_type);
$this->write_log("获取了一条记录 ".$sql);
return $rt;
}

//获取查询条件的所有记录
public function get_all($sql,$result_type = MYSQL_ASSOC) {
$query = $this->query($sql);
$i = 0;
$rt = array();
while($row = mysql_fetch_array($query,$result_type)) {
$rt[$i]=$row;
$i++;
}
$this->write_log("获取了全部记录 ".$sql);
return $rt;
}

//插入一条记录
public function insert($table,$dataArray) {
$field = "";
$value = "";
if( !is_array($dataArray) || count($dataArray)<=0) {
$this->halt('没有要插入的数据');
return false;
}
while(list($key,$val)=each($dataArray)) {
$field .="$key,";
$value .="'$val',";
}
$field = substr( $field,0,-1);
$value = substr( $value,0,-1);
$sql = "insert into $table($field) values($value)";
$this->write_log("插入一条记录 ".$sql);
if(!$this->query($sql)) return false;
return true;
}

//更新一条记录
public function update( $table,$dataArray,$condition="") {
if( !is_array($dataArray) || count($dataArray)<=0) {
$this->halt('没有要更新的数据');
return false;
}
$value = "";
while( list($key,$val) = each($dataArray))
$value .= "$key = '$val',";
$value .= substr( $value,0,-1);
$sql = "update $table set $value where 1=1 and $condition";
$this->write_log("更新一条记录 ".$sql);
if(!$this->query($sql)) return false;
return true;
}

//删除
public function delete( $table,$condition="") {
if( empty($condition) ) {
$this->halt('没有设置删除的条件');
return false;
}
$sql = "delete from $table where 1=1 and $condition";
$this->write_log("删除 ".$sql);
if(!$this->query($sql)) return false;
return true;
}

//返回结果集
public function fetch_array($query, $result_type = MYSQL_ASSOC){
$this->write_log("返回结果集");
return mysql_fetch_array($query, $result_type);
}

//获取记录条数
public function num_rows($results) {
if(!is_bool($results)) {
$num = mysql_num_rows($results);
$this->write_log("获取的记录条数为".$num);
return $num;
} else {
return 0;
}
}

//释放结果集
public function free_result() {
$void = func_get_args();
foreach($void as $query) {
if(is_resource($query) && get_resource_type($query) === 'mysql result') {
return mysql_free_result($query);
}
}
$this->write_log("释放结果集");
}

//获取最后插入的id
public function insert_id() {
$id = mysql_insert_id($this->link_id);
$this->write_log("最后插入的id为".$id);
return $id;
}

//关闭数据库连接
protected function close() {
$this->write_log("已关闭数据库连接");
return @mysql_close($this->link_id);
}

//错误提示
private function halt($msg='') {
$msg .= "\\r\\n".mysql_error();
$this->write_log($msg);
die($msg);
}

//析构函数
public function __destruct() {
$this->free_result();
$use_time = ($this-> microtime_float())-($this->time);
$this->write_log("完成整个查询任务,所用时间为".$use_time);
if($this->is_log){
fclose($this->handle);
}
}

//写入日志文件
public function write_log($msg=''){
if($this->is_log){
$text = date("Y-m-d H:i:s")." ".$msg."\\r\\n"; fwrite($this->handle,$text);
}
}

//获取毫秒数
public function microtime_float() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
}

这个mysqlDB类经过运维平台验证。比较稳定,用法也比较简单。

1
2
3
4
<?php 
include_once(xxxx/mysqldb.class.php);
$mysql = new mysqlDB;
$select_one = $mysql->get_one($sql,MYSQL_ASSOC);#三种模式按需所选,函数默认为MYSQL_ASSOC模式
----------------本文结束 感谢阅读----------------