程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP封裝數據庫操作類(鏈接數據庫)

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

 代碼如下 復制代碼


<?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

 代碼如下 復制代碼 <?php
    require_once("./configuration.php");   //引入配置常量文件
    date_default_timezone_set(TIMEZONE); 
 
 /**
  * 類名:DB
  * 說明:數據庫操作類
  */
 class DB
 {
  public $host;            //服務器
  public $username;        //數據庫用戶名
  public $password;        //數據密碼
  public $dbname;          //數據庫名
  public $conn;            //數據庫連接變量
  
  /**
   * DB類構造函數
   */
  public function 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;
   
  }
  /**
   * 打開數據庫連接
   */
  public function open()
  {
   $this->conn = mysql_connect($this->host,$this->username,$this->password);
   mysql_select_db($this->dbname);
   mysql_query("SET CHARACTER SET utf8");
  }
  /**
   * 關閉數據連接
   */
  public function close()
  {
   mysql_close($this->conn);
  }
  /**
   * 通過sql語句獲取數據
   * @return: array()
   */
  public function getObjListBySql($sql)
  {
   $this->open();
   $rs = mysql_query($sql,$this->conn);
   $objList = array();
   while($obj = mysql_fetch_object($rs))
   {
    if($obj)
    {
     $objList[] = $obj;
    }
   }
   $this->close();
   return $objList;
  }
  
     /**
   * 向數據庫表中插入數據
   * @param:$table,表名
   * @param:$columns,包含表中所有字段名的數組。默認空數組,則是全部有序字段名
   * @param:$values,包含對應所有字段的屬性值的數組
   */
  public function 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;
  }
  
  /**
   * 通過表中的某一屬性獲取數據
   */
  public function getDataByAtr($tableName,$atrName,$atrValue){
   @$data = $this->getObjListBySql("SELECT * FROM ".$tableName." WHERE $atrName = '$atrValue'");
   if(count($data)!=0)return $data;
   return NULL; 
   }
  /**
   * 通過表中的"id",刪除記錄
   */
   public function delete($tableName,$atrName,$atrValue){
    $this->open();
    $deleteResult = false;
    if(mysql_query("DELETE FROM ".$tableName." WHERE $atrName = '$atrValue'")) $deleteResult = true;
    $this->close();
    if($deleteResult) return true;
    else return false;
    }
  /**
   * 更新表中的屬性值
   */
   public function updateParamById($tableName,$atrName,$atrValue,$key,$value){
    $db = new DB();
    $db->open();
    if(mysql_query("UPDATE ".$tableName." SET $key = '$value' WHERE $atrName = '$atrValue' ")){  //$key不要單引號
     $db->close();
     return true;
    }
    else{
     $db->close();
     return false;
    }
   }
  /*
   * @description: 取得一個table的所有屬性名
   * @param: $tbName 表名
   * @return:字符串數組
   */
  public function 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

 代碼如下 復制代碼

<?php

     require_once("./db.class.php");
 
  class User{
   public $name = NULL;
   public $password = NULL;
  
   /**
    * 構造函數
    */
   public function __construct($name,$password){
    $this->name = $name;
    $this->password = $password;
    }

   public function insert(){
    $db = new DB();
       $resultid = $db->insertData("user",array(),array('',$this->name,$this->password)); 
       return $resultid;
    }
  
   public static function getUserById($uid){
     $db = new DB();
     return $db->getDataByAtr("user",'uid',$uid);
     }
 
   public static function getUserByName($name){
     $db = new DB();
     @$data = $db->getObjListBySql("SELECT * FROM user WHERE name = '$name'");
     if(count($data)!=0)return $data;
     else return null;
     }

   public static function getAllUser(){
     $db = new DB();
      @$data = $db->getObjListBySql("SELECT * FROM user");
      if(count($data)!=0) return $data;
      else return null;
     }
    
   public static function deleteByUid($uid){
     $admin = Admin::getAdminById($uid);
     $db = new DB();
     if($db->delete("user","uid",$uid)) return true;
     else return false;
     }
   } 
  
?>

測試程序: test.php

 代碼如下 復制代碼

<?php
    header("Content-Type:text/html; charset=utf8");

 require_once("./user.class.php");

 $user = new User("HelloWorld","123456");
 $user->insert();

 $users = User::getAllUser();

 foreach ($users as $u) {
  echo "<br/>".$u->name."<br/>".$u->password."<br/>";
 }
?>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved