PHP封裝資料庫操作類(連結資料庫)

來源:互聯網
上載者:User

有物件導向技術基礎的編程人員看一天就可以寫起來了。而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/>";
 }
?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.