我們在網站開發時比較合理的做法就是我們的常用的一些程式做成函數或封閉成類,這樣可以重複利用,可以節約開發成本了,下面我來給各位介紹了我常使用的類。
有物件導向技術基礎的編程人員看一天就可以寫起來了。而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
| 代碼如下 |
複製代碼 |
/** * 資料庫配置資訊 */ 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
| 代碼如下 |
複製代碼 |
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
| 代碼如下 |
複製代碼 |
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
| 代碼如下 |
複製代碼 |
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 " ".$u->name." ".$u->password." "; } ?> |
http://www.bkjia.com/PHPjc/630692.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/630692.htmlTechArticle我們在網站開發時比較合理的做法就是我們的常用的一些程式做成函數或封閉成類,這樣可以重複利用,可以節約開發成本了,下面我來給...