用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > php教程

PHP封装数据库操作类

时间:2015-01-23  来源:西部数据  作者:西部数据

我们在网站开发时比较合理的做法就是我们的常用的一些程序做成函数或封闭成类,这样可以重复利用,可以节约开发成本了,下面我来给各位介绍了我常使用的类.

有面向对象技术基础的编程人员看一天就可以写起来了,而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. <?php  
  2.      /** 
  3.       * 数据库配置信息 
  4.       */ 
  5.      define('DB_HOST','localhost');            //服务器 
  6.      define('DB_USER','root');                 //数据库用户名 
  7.      define('DB_PASSWORD','');                 //数据库密码 
  8.      define('DB_NAME','test0');                //默认数据库 
  9.      define('DB_CHARSET','utf8');              //数据库字符集 
  10.      define('TIMEZONE',"PRC");                 //时区设置 
  11. ?> 

接下来就是数据库操作类db.class.php,代码如下:

  1. <?php 
  2.     require_once("./configuration.php");   //引入配置常量文件 
  3.     date_default_timezone_set(TIMEZONE);   
  4.  
  5.  /** 
  6.   * 类名:DB 
  7.   * 说明:数据库操作类 
  8.   */ 
  9.  class DB 
  10.  { 
  11.   public $host;            //服务器 
  12.   public $username;        //数据库用户名 
  13.   public $password;        //数据密码 
  14.   public $dbname;          //数据库名 
  15.   public $conn;            //数据库连接变量 
  16.    
  17.   /** 
  18.    * DB类构造函数 
  19.    */ 
  20.   public function DB($host=DB_HOST ,$username=DB_USER,$password=DB_PASSWORD,$dbname=DB_NAME) 
  21.   { 
  22.    $this->host = $host
  23.    $this->username = $username
  24.    $this->password = $password
  25.    $this->dbname = $dbname
  26.     
  27.   } 
  28.   /** 
  29.    * 打开数据库连接 
  30.    */ 
  31.   public function open() 
  32.   { 
  33.    $this->conn = mysql_connect($this->host,$this->username,$this->password); 
  34.    mysql_select_db($this->dbname); 
  35.    mysql_query("SET CHARACTER SET utf8"); 
  36.   } 
  37.   /** 
  38.    * 关闭数据连接 
  39.    */ 
  40.   public function close() 
  41.   { 
  42.    mysql_close($this->conn); 
  43.   } 
  44.   /** 
  45.    * 通过sql语句获取数据 
  46.    * @return: array() 
  47.    */ 
  48.   public function getObjListBySql($sql
  49.   { 
  50.    $this->open(); 
  51.    $rs = mysql_query($sql,$this->conn); 
  52.    $objList = array(); 
  53.    while($obj = mysql_fetch_object($rs)) 
  54.    { 
  55.     if($obj
  56.     { 
  57.      $objList[] = $obj
  58.     } 
  59.    } 
  60.    $this->close(); 
  61.    return $objList
  62.   } 
  63.    
  64.      /** 
  65.    * 向数据库表中插入数据 
  66.    * @param:$table,表名 
  67.    * @param:$columns,包含表中所有字段名的数组。默认空数组,则是全部有序字段名 
  68.    * @param:$values,包含对应所有字段的属性值的数组 
  69.    */ 
  70.   public function insertData($table,$columns=array(),$values=array()) 
  71.   { 
  72.    $sql = 'insert into '.$table .'( '
  73.    for($i = 0; $i < sizeof($columns);$i ++) 
  74.    { 
  75.     $sql .= $columns[$i]; 
  76.     if($i < sizeof($columns) - 1) 
  77.     { 
  78.      $sql .= ','
  79.     } 
  80.    } 
  81.    $sql .= ') values ( ';  
  82.    for($i = 0; $i < sizeof($values);$i ++) 
  83.    { 
  84.     $sql .= "'".$values[$i]."'"
  85.     if($i < sizeof($values) - 1) 
  86.     { 
  87.      $sql .= ','
  88.     } 
  89.    } 
  90.    $sql .= ' )'
  91.    $this->open(); 
  92.    mysql_query($sql,$this->conn); 
  93.    $id = mysql_insert_id($this->conn); 
  94.    $this->close(); 
  95.    return $id
  96.   } 
  97.    
  98.   /** 
  99.    * 通过表中的某一属性获取数据 
  100.    */ 
  101.   public function getDataByAtr($tableName,$atrName,$atrValue){ 
  102.    @$data = $this->getObjListBySql("SELECT * FROM ".$tableName." WHERE $atrName = '$atrValue'"); 
  103.    if(count($data)!=0)return $data
  104.    return NULL; //开源代码phpfensi.com 
  105.    } 
  106.   /** 
  107.    * 通过表中的"id",删除记录 
  108.    */ 
  109.    public function delete($tableName,$atrName,$atrValue){ 
  110.     $this->open(); 
  111.     $deleteResult = false; 
  112.     if(mysql_query("DELETE FROM ".$tableName." WHERE $atrName = '$atrValue'")) $deleteResult = true; 
  113.     $this->close(); 
  114.     if($deleteResultreturn true; 
  115.     else return false; 
  116.     } 
  117.   /** 
  118.    * 更新表中的属性值 
  119.    */ 
  120.    public function updateParamById($tableName,$atrName,$atrValue,$key,$value){ 
  121.     $db = new DB(); 
  122.     $db->open(); 
  123.     if(mysql_query("UPDATE ".$tableName." SET $key = '$value' WHERE $atrName = '$atrValue' ")){  //$key不要单引号 
  124.      $db->close(); 
  125.      return true; 
  126.     } 
  127.     else
  128.      $db->close(); 
  129.      return false; 
  130.     } 
  131.    } 
  132.   /*  
  133.    * @description: 取得一个table的所有属性名 
  134.    * @param: $tbName 表名 
  135.    * @return:字符串数组 
  136.    */ 
  137.   public function fieldName($tbName){ 
  138.    $resultName=array(); 
  139.    $i=0; 
  140.    $this->open(); 
  141.    $result = mysql_query("SELECT * FROM $tbName"); 
  142.    while ($property = mysql_fetch_field($result)){ 
  143.     $resultName[$i++]=$property->name; 
  144.     } 
  145.    $this->close(); 
  146.    return $resultName
  147.       } 
  148.  } 
  149.  ?> 

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

user.class.php,代码如下:

  1. <?php 
  2.  
  3.      require_once("./db.class.php"); 
  4.  
  5.   class User{ 
  6.    public $name = NULL; 
  7.    public $password = NULL; 
  8.     
  9.    /** 
  10.     * 构造函数 
  11.     */ 
  12.    public function __construct($name,$password){ 
  13.     $this->name = $name
  14.     $this->password = $password
  15.     } 
  16.  
  17.    public function insert(){ 
  18.     $db = new DB(); 
  19.        $resultid = $db->insertData("user",array(),array('',$this->name,$this->password));  
  20.        return $resultid
  21.     } 
  22.    
  23.    public static function getUserById($uid){ 
  24.      $db = new DB(); 
  25.      return $db->getDataByAtr("user",'uid',$uid); 
  26.      } 
  27.  
  28.    public static function getUserByName($name){ 
  29.      $db = new DB(); 
  30.      @$data = $db->getObjListBySql("SELECT * FROM user WHERE name = '$name'"); 
  31.      if(count($data)!=0)return $data
  32.      else return null; 
  33.      } 
  34.  
  35.    public static function getAllUser(){ 
  36.      $db = new DB(); 
  37.       @$data = $db->getObjListBySql("SELECT * FROM user"); 
  38.       if(count($data)!=0) return $data
  39.       else return null; 
  40.      } 
  41.       
  42.    public static function deleteByUid($uid){ 
  43.      $admin = Admin::getAdminById($uid); 
  44.      $db = new DB(); 
  45.      if($db->delete("user","uid",$uid)) return true; 
  46.      else return false; 
  47.      } 
  48.    }   
  49.     
  50. ?> 

测试程序:test.php,代码如下:

  1. <?php 
  2.     header("Content-Type:text/html; charset=utf8"); 
  3.  
  4.  require_once("./user.class.php"); 
  5.  
  6.  $user = new User("HelloWorld","123456"); 
  7.  $user->insert(); 
  8.  
  9.  $users = User::getAllUser(); 
  10.  
  11.  foreach ($users as $u) { 
  12.   echo "<br/>".$u->name."<br/>".$u->password."<br/>"
  13.  } 
  14. ?>
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
栏目更新
栏目热门