PHP封裝資料庫操作類(連結資料庫)_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

代碼如下 複製代碼


/**
* 資料庫配置資訊
*/
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我們在網站開發時比較合理的做法就是我們的常用的一些程式做成函數或封閉成類,這樣可以重複利用,可以節約開發成本了,下面我來給...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.