PHP封装数据库操作类

来源:互联网 发布:手机股票决策软件 编辑:程序博客网 时间:2024/05/16 08:56


原文地址:http://raysmond.com/node/340

很多人初学动态网页开发都会选择PHP这门语言,毕竟PHP是最容易上手的语言之一。有面向对象技术基础的编程人员看一天就可以写起来了。而PHP在访问数据库的时候又经常会出现各种问题,如字符编码问题、SQL语法错误问题、PHP处理数据记录对象和返回对象的问题等。我这里写了一个数据库操作类,封装了数据库增删添改等操作,很方便使用。用这个类,可以加速网站的后台开发。

优点:

  1. 方便快捷, 数据库操作只需调用接口;
  2. 统一编码(utf8),不易导致乱码
  3. 结构清晰. 如处理前端请求的后台程序(test.php) + 表封装类(user.class.php) + 数据库封装类(db.class.php) + 配置信息(configuration.php)

以下例子有四个文件: configuration.php + db.class.php + user.class.php + test.php,放在同一个目录下。

首先是一个数据库配置的文件类configuration.php

1
2
3
4
5
6
7
8
9
10
11
12
<?php
     /**
      * 数据库配置信息
      */
     define('DB_HOST','localhost');            //服务器
     define('DB_USER','root');                 //数据库用户名
     define('DB_PASSWORD','');                 //数据库密码
     define('DB_NAME','test0');                //默认数据库
     define('DB_CHARSET','utf8');              //数据库字符集
     define('TIMEZONE',"PRC");                 //时区设置
 
?>

接下来就是数据库操作类db.class.php

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
<?php
    require_once("./configuration.php");   //引入配置常量文件
    date_default_timezone_set(TIMEZONE); 
     
    /**
     * 类名:DB
     * 说明:数据库操作类
     */
    classDB
    {
        public$host;            //服务器
        public$username;        //数据库用户名
        public$password;        //数据密码
        public$dbname;          //数据库名
        public$conn;            //数据库连接变量
         
        /**
         * DB类构造函数
         */
        publicfunction DB($host=DB_HOST ,$username=DB_USER,$password=DB_PASSWORD,$dbname=DB_NAME)
        {
            $this->host = $host;
            $this->username = $username;
            $this->password = $password;
            $this->dbname = $dbname;
             
        }
        /**
         * 打开数据库连接
         */
        publicfunction open()
        {
            $this->conn = mysql_connect($this->host,$this->username,$this->password);
            mysql_select_db($this->dbname);
            mysql_query("SET CHARACTER SET utf8");
        }
        /**
         * 关闭数据连接
         */
        publicfunction close()
        {
            mysql_close($this->conn);
        }
        /**
         * 通过sql语句获取数据
         * @return: array()
         */
        publicfunction getObjListBySql($sql)
        {
            $this->open();
            $rs= mysql_query($sql,$this->conn);
            $objListarray();
            while($obj= mysql_fetch_object($rs))
            {
                if($obj)
                {
                    $objList[] = $obj;
                }
            }
            $this->close();
            return$objList;
        }
         
        /**
         * 向数据库表中插入数据
         * @param:$table,表名
         * @param:$columns,包含表中所有字段名的数组。默认空数组,则是全部有序字段名
         * @param:$values,包含对应所有字段的属性值的数组
         */
        publicfunction insertData($table,$columns=array(),$values=array())
        {
            $sql'insert into '.$table.'( ';
            for($i= 0; $i< sizeof($columns);$i++)
            {
                $sql.= $columns[$i];
                if($i< sizeof($columns) - 1)
                {
                    $sql.= ',';
                }
            }
            $sql.= ') values ( ';
            for($i= 0; $i< sizeof($values);$i++)
            {
                $sql.= "'".$values[$i]."'";
                if($i< sizeof($values) - 1)
                {
                    $sql.= ',';
                }
            }
            $sql.= ' )';
            $this->open();
            mysql_query($sql,$this->conn);
            $id= mysql_insert_id($this->conn);
            $this->close();
            return$id;
        }
         
        /**
         * 通过表中的某一属性获取数据
         */
        publicfunction getDataByAtr($tableName,$atrName,$atrValue){
            @$data$this->getObjListBySql("SELECT * FROM ".$tableName." WHERE $atrName = '$atrValue'");
            if(count($data)!=0)return$data;
            returnNULL;   
            }
        /**
         * 通过表中的"id",删除记录
         */
         publicfunction delete($tableName,$atrName,$atrValue){
             $this->open();
             $deleteResult= false;
             if(mysql_query("DELETE FROM ".$tableName." WHERE $atrName = '$atrValue'")) $deleteResult= true;
             $this->close();
             if($deleteResultreturntrue;
             elsereturn false;
             }
        /**
         * 更新表中的属性值
         */
         publicfunction updateParamById($tableName,$atrName,$atrValue,$key,$value){
            $dbnewDB();
            $db->open();
            if(mysql_query("UPDATE ".$tableName." SET $key = '$value' WHERE $atrName = '$atrValue' ")){  //$key不要单引号
                $db->close();
                returntrue;
            }
            else{
                $db->close();
                returnfalse;
            }
         }
        /*
         * @description: 取得一个table的所有属性名
         * @param: $tbName 表名
         * @return:字符串数组
         */
        publicfunction fieldName($tbName){
            $resultName=array();
            $i=0;
            $this->open();
            $result= mysql_query("SELECT * FROM $tbName");
            while($property= mysql_fetch_field($result)){
                $resultName[$i++]=$property->name;
                }
            $this->close();
            return$resultName;
            }
    }
    ?>

接下来是测试了。我在phpmyadmin中建了一个test0数据库,里面建一张表user。然后用php写一个user类对应数据库中的user表。

user.class.php

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
<?php
 
     require_once("./db.class.php");
     
     classUser{
         public$name = NULL;
         public$password = NULL;
          
         /**
          * 构造函数
          */
         publicfunction __construct($name,$password){
             $this->name = $name;
             $this->password = $password;
             }
 
         publicfunction insert(){
             $dbnewDB();
             $resultid$db->insertData("user",array(),array('',$this->name,$this->password));   
             return$resultid;
             }
         
         publicstatic function getUserById($uid){
              $dbnewDB();
              return$db->getDataByAtr("user",'uid',$uid);
              }
     
         publicstatic function getUserByName($name){
              $dbnewDB();
              @$data$db->getObjListBySql("SELECT * FROM user WHERE name = '$name'");
              if(count($data)!=0)return$data;
              elsereturn null;
              }
 
         publicstatic function getAllUser(){
              $dbnewDB();
              @$data$db->getObjListBySql("SELECT * FROM user");
              if(count($data)!=0) return$data;
              elsereturn null;
              }
               
         publicstatic function deleteByUid($uid){
              $admin= Admin::getAdminById($uid);
              $dbnewDB();
              if($db->delete("user","uid",$uid)) returntrue;
              elsereturn false;
              }
         }  
          
?>

测试程序: test.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
    header("Content-Type:text/html; charset=utf8");
 
    require_once("./user.class.php");
 
    $usernewUser("HelloWorld","123456");
    $user->insert();
 
    $users= User::getAllUser();
 
    foreach($usersas $u) {
        echo"<br/>".$u->name."<br/>".$u->password."<br/>";
    }
?>

运行结果: 

0 0
原创粉丝点击