PHP数据库处理类

在WEB应用程序开发数据库操作类是一个必不可少的东西了,当然大家可以直接连接数据库进行查询,但这样维护不方便,下面我整理了一个不错的PHP数据库处理类与各位分享.

最近在看后盾网的php视频,主要内容是相关制作一个博客系统,感觉还是很有收获,简单的数据库处理类,下面是其中讲到的一个简单的数据库处理类,请见源码:

  1. <?php
  2. /**
  3. * Created by JetBrains PhpStorm.
  4. * User: YangLiu
  5. * Date: 2013-7-12
  6. * Time: 下午6:19
  7. * Description:这是一个简单的数据库操作类,便于快速向数据库插入数据、删除数据,更新数据
  8. */
  9. class db {
  10. //数据库连接
  11. protected $mysqli;
  12. //表名
  13. protected $table;
  14. //选项
  15. protected $opt;
  16. /***
  17. * 构造方法
  18. * @param $tab_name
  19. */
  20. function __construct($tab_name){
  21. $this->config($tab_name);
  22. }
  23. // 配置方法
  24. protected function config($tab_name){
  25. $this->db=new mysqli(DBHOST,DBUSER,DBPWD,DBNAME);
  26. //DBFIX为数据库表前缀
  27. $this->table = DBFIX.$tab_name;
  28. if(mysqli_connect_errno()){
  29. echo "数据库连接错误".mysqli_connect_errno();
  30. exit();
  31. }
  32. $this->db->query("SET NAMES 'GBK'");
  33. //给opt数组设置初始值
  34. $this->opt['field'] = '*';
  35. $this->opt['where']=$this->opt['order']=$this->opt['limit']=$this->opt['group'] = '';
  36. }
  37. // 获得当前表字段
  38. function tbFields(){
  39. $result = $this->db->query("DESC {$this->table}");
  40. $fieldArr = array();
  41. while(($row = $result->fetch_assoc())!=false){
  42. $fieldArr[] = $row['Field'];
  43. }
  44. return $fieldArr;
  45. }
  46. // 获得查询字段
  47. function field($field){
  48. $fieldArr = is_string($field)?explode(",",$field):$field;
  49. if(is_array($fieldArr)){
  50. $field = '';
  51. foreach($fieldArr as $v){
  52. $field.='`' . $v. '`' . ',';
  53. }
  54. }
  55. return rtrim($field,',');
  56. }
  57. // SQL条件方法
  58. function where($where){
  59. $this->opt['where'] = is_string($where) ?"WHERE " . $where : '';
  60. return $this;
  61. }
  62. //limit方法
  63. function limit($limit){
  64. $this->opt['limit'] = is_string($limit) ? "LIMIT ".$limit : '';
  65. return $this;
  66. }
  67. //排序方法
  68. function order($order){
  69. $this->opt['order'] = is_string($order) ? "ORDER BY ".$order:'';
  70. return $this;
  71. }
  72. // 分组GROUP BY
  73. function group($group){
  74. $this->opt['group'] = is_string($group) ? 'GROUP BY'.$group : '';
  75. return $this;
  76. }
  77. //SELECT
  78. function select(){
  79. $sql = "SELECT {$this->opt['field']} FROM {$this->table}
  80. {$this->opt['where']} {$this->opt['group']} {$this->opt['limit']}
  81. {$this->opt['order']} ";
  82. return $this->sql($sql);
  83. }
  84. //DELETE方法
  85. function delete($){
  86. if($id == '' && emptyempty($this->opt['where'])){
  87. die('查询条件不能为空');
  88. }
  89. if($id != ''){
  90. if(is_array($id)){
  91. $id = implode(',',$id);
  92. }
  93. $this->opt['where'] = "WHERE id IN (" .$id. ")";
  94. }
  95. $sql = "DELETE FROM {$this->table} {$this->opt['where']} {$this->opt['limit']}";
  96. //echo $sql."<br/>";
  97. return $this->query($sql);
  98. }
  99. //查阅单条记录
  100. function find($id){
  101. $sql = "SELECT {$this->opt['field']} FROM {$this->table} WHERE `id` = {$id}";
  102. //echo $sql.'<br>';
  103. return $this->sql($sql);
  104. }
  105. // 添加数据
  106. function insert($args){
  107. is_array($args) or die('参数非数组');
  108. $fields = $this->field(array_keys($args));
  109. $values = $this->values(array_values($args));
  110. $sql = "INSERT INTO {$this->table} ({$fields}) VALUES($values)";
  111. if($this->query($sql)>0){
  112. return $this->db->insert_id;
  113. }
  114. return false;
  115. }
  116. // 更新UPDATE
  117. function update($args){
  118. is_array($args) or die("参数非数组");
  119. if(emptyempty($this->opt['where'])) die("条件不能为空");
  120. $set = '';
  121. $gpc = get_magic_quotes_gpc();
  122. while(list($k,$v) = each($args)){
  123. $v = !$gpc?addslashes($v):$v;
  124. $set.="`{$k}`='".$v."',";
  125. }
  126. $set = rtrim($set,',');
  127. $sql = "UPDATE {$this->table} SET $set {$this->opt['where']}";
  128. return $this->query($sql);
  129. }
  130. // 统计所有记录数
  131. function count($tabname=''){
  132. $tabname = $tabname==''?$this->table:$tabname;
  133. $sql = "SELECT `id` FROM {$tabname} {$this->opt['where']}";
  134. //echo $sql.'<br/>';
  135. return $this->query($sql);
  136. }
  137. // 数据数组转为字符串格式,同时进行转议
  138. protected function values($value) {
  139. if (! get_magic_quotes_gpc ()) {
  140. $strValue = '';
  141. foreach ( $value as $v ) {
  142. $strValue .= "'" . addslashes ( $v ) . "',";
  143. }
  144. } else {
  145. foreach ( $value as $v ) {
  146. $strValue .= "'$v',";
  147. }
  148. }
  149. return rtrim ( $strValue, ',' );
  150. }
  151. // 获得结果集
  152. function sql($sql) {
  153. $result = $this->db->query($sql) or die($this->dbError());
  154. $resultArr = array();
  155. while(($row = $result->fetch_assoc())!=false){
  156. $resultArr[] = $row;
  157. }
  158. return $resultArr;
  159. }
  160. // 没有结果集的SQL
  161. function query($sql){
  162. $this->db->query($sql) or die($this->dbError());
  163. return $this->db->affected_rows;
  164. }//开源代码phpfensi.com
  165. // 返回错误
  166. function dbError(){
  167. return $this->db->error;
  168. }
  169. }
  170. ?>

以上是一个简单的PHP数据库处理类,就它的使用特地做个说明,下面对以上代码中的部分相常量和变量作以说明:

$mysqli:对当前数据库的链接引用

$table:当前数据库的表名

$opt:当前数据库的表的所有字段名

DBFIX:数据库配置中的常量“表前缀”

DBHOST:数据库主机

DBFIX:数据库用户名

DBPWD:数据库密码

DBNAME:数据库名称

数据库处理类的使用方法,配置数据库处理类,在使用数据库处理类之前,你必须有一个相关的配置文件,下面我就写一个connect.php文件,文件内容如下所示:

  1. <?php
  2. /**
  3. * Created by JetBrains PhpStorm.
  4. * User: YangLiu
  5. * Date: 2013-7-14
  6. * Time: 下午2:15
  7. * Description:数据库配置文件
  8. */
  9. define("DBHOST",'localhost'); //定义数据库服务器连接地址
  10. define("DBUSER",'root'); //数据库用户名
  11. define("DBPWD",''); //数据库密码
  12. define("DBNAME",'blog'); //定义数据库名
  13. define("DBFIX",'blog_'); //定义数据库表的前缀
  14. ?>

为了让您更简单的理解,我就没有建立更多的目录,把所有的文件全部放在同一目录,如果您觉得不好,也可以自行建立目录,并重新根据情况来调整文件位置.

数据库处理类的使用,使用数据库,你要先引用connect.php和db.class.php文件,下面举一个demo.php文件为例:

  1. <?php
  2. /**
  3. * Created by JetBrains PhpStorm.
  4. * User: LiuYang
  5. * Date: 2013-9-15
  6. * Time: 下午10:39
  7. * Description:演示DEMO文件
  8. */
  9. include './config.php'; //加载配置文件
  10. include './page.class.php'; //加载数据库处理类
  11. $db = $db = new db('blog'); //链接数据库的表blog_blog
  12. ?>

输出数据库表的字段名,输出数据库表的字段名,用的tbFields方法,代码如下:

$tbField = $db->tbFields();var_dump($tbField);

其输出结果如下:

  1. array (size=5)
  2. 0 => string 'id' (length=2)
  3. 1 => string 'btitle' (length=6)
  4. 2 => string 'content' (length=7)
  5. 3 => string 'status' (length=6)
  6. 4 => string 'cid' (length=3)

下面,再介绍一个数据库处理类中的相关的另一个方法:

echo $db->field($tbFields);

最后的输出结果:`id`,`btitle`,`content`,`status`,`cid`

统计所有记录数,数据库类中还有一个方法,用来统计数据的所有条数count方法,在我们的分页处理中,它也就会显示得重要了,代码如下:

echo $db->count('blog');

注意:以上代码是根据id来查阅,其中count方法代码如下:

  1. // 统计所有记录数
  2. function count($tabname=''){
  3. $tabname = $tabname==''?$this->table:$tabname;
  4. $sql = "SELECT `id` FROM {$tabname} {$this->opt['where']}";
  5. return $this->query($sql);
  6. }

数据库的增、删、改、查

数据库的相关操作无外乎就是增、删、改、查,下面对其作以简单介绍.

插入数据

insert方法向数据库中插入数据,其中传入的参数为一个数组,如array('btitle'=>'www.phpfensi.com','content'=>'小天地,大世界是一个技术交流博客')。其中数组的键名即为表的字段名,而键值即为想要插入的内容,请看下面的示例:

$inserArr = array('btitle'=>'www.phpfensi.com','content'=>'小天地,大世界是一个技术交流博客');$db->insert($inserArr);

删除数据

delete方法是专门来删除数据,为了防止数据被误删,数据删除必须存在一定的限制,比如说通过where、limit方法来作一定的限制,或者你可以直接传入要删除数据的id,你可以查看下面的示例:

  1. //删除id为3的数据
  2. $db->delete(3);
  3. //删除id>5的数据
  4. $db->where('id>5')->delete();
  5. //删除从20起后的10条数据
  6. $db->where('id>5')->limit('20,10')->delete();

更新数据

数据添加了,有时发现错误,就得高法来更改数据,update方法用来更新数据,update方法与insert方法类似,都接受一个数组参数,数组的键名为表的字段名,对应的键值为要插入的内容,下面的内容就是把id为29的数据更新为array中的数据,代码如下:

  1. $db->where(')->update(array('btitle'=>'www.phpfensi.com','content'=>'小天地,大世界是一个技术交流博客'));
  2. //更新id>35的所有数据
  3. $db->where('id>29')->update(array('btitle'=>'www.phpfensi.com','content'=>'小天地,大世界是一个技术交流博客'));

查找数据

数据库处理类中提供了select方法,可以很方便的进行数据的查找,结合着where、limit方法,就可以查找相应的数据,具体的使用方法请见下例:

  1. $db->select(); //查找所有数据
  2. $db->where(')->select(); //查找指定数据
  3. $db->where('id>9')->select(); //查找id大于9的数据集合
  4. $db->limit('10,9')->select(); //从查找数据第10条以后的9条数据
  5. $db->where('id>50')->limit('10,9')->select();

其它方法:除了以上几种方法之外,数据库处理类还提供了如下的方法.

order方法:主要是来更改查找数据排序方式

group方法:数组方法

find方法:查找单条记录

sql方法:直接执行数据SQL语句,并返回处数据集

query方法:也可以执行数据SQL语句,但不返回数据集,而是返回受影响的记录条数.

关于数据库处理类,最后说明一点,此数据库处理类是后盾网PHP视频中所讲,有助于像我这样的新手来学习,故特地整理.