PHP 資料庫讀寫操作的設計 一

2021-08-20 21:41:32 字數 2683 閱讀 9017

資料庫連線類的設計

**系統中的資料是存放在資料庫中,所以就無法避免地要對資料庫進行頻繁的讀寫操作。雖然 php 提供了很好的方法,但每次都得寫一長串也是個麻煩,所以設計了乙個易用的讀寫資料庫類別。

一、利用單例模式(singleton)建立資料庫連線類

資料庫連線物件通常會在整個專案中被共享使用,沒有必要在每一次使用時都例項化乙個物件,不僅低效而且浪費資源。因此採用單例模式的類來確保它在整個應用系統中是唯一的。

單例模式的類通常是採用靜態的類方法 getinstance() 來實現的,這個靜態方法只返回乙個該類的唯一例項。在第一次呼叫此方法時,該方法將建立乙個例項,存放在乙個私有的靜態變數中,並返回該例項。在下一次呼叫時,將不再建立新的例項,而是返回第一次所建立的例項。

採用單例模式的類的建構函式通常設為私有,以便防止直接例項化該類而建立新的例項。

<?php

class

dbconnect

return

self::$instance;

}private

function

__construct

() private

function

__clone

() {}

}?>

二、利用簡單工廠模式(****** factory)取得資料庫連線類的例項

在乙個應用系統中,雖然一開始就會決定採用何種資料庫系統,但也不是不可能更換,所以加入簡單工廠模式的設計,可以降低將來更換後修改的工作量。

首先定義乙個基楚的資料庫連線介面:

<?php

inte***ce

idbhelper

?>

然後針對不同的資料庫設計相對應的類,令其繼承自 idbconnect 介面,例如:

class

mysqlhelper

implements

idbhelper

class

sqlserverhelper

implements

idbhelper

class

oraclehelper

implements

idbhelper

最後設計乙個簡單工廠模式的 dbfactory 類依不同狀況來取得資料庫例項。

class

dbfactory

public

static

function

createby

($sztype)

}}

三、實作資料庫連線類

從 idbhelper 介面中可以看出,資料庫連線類除了負責連線資料庫之外,也得肩負資料庫訪問的功能,所以有簡單的取得一筆資料 getone()、多筆資料或其他查詢 query() 及 execute() 執行新增、修改、刪除等動作。

mysqlhelper 類採用 pdo 的方式來操控 mysql 資料庫,其程式**如下:

<?php

/*** 需要讀入乙個外部檔 password.php。

*/require_once('idbhelper.php');

class

mysqlhelper

implements

idbhelper

return

self::$instance;

}private

function

__construct

() catch (pdoexception $e)

}function

__destruct

() public

function

close

()

// 以物件的方式傳回。

public

function

getone

( $sql, $aary )

public

function

query

( $sql, $aary=null, $ball=false )

// 只執行命令,不傳回結果。

public

function

execute

( $sql, $aary=null )

} catch(pdoexception $e) else }}

}

private

function

begintransaction

() else

}private

function

commit

() private

function

rollback

()

}?>

結語

mysqlhelper 類負責對資料庫的直接操作,給予什麼樣的 sql 命令,就會依指示辦事。這裡只實作出 mysqlhelper 的部份,至於 sqlserverhelper 及 orcalhelper,因我個人沒用到,所以就沒實作過。

PHP 資料庫讀寫操作的設計 二

我的資料基礎類 myinfo 在物件導向的程式設計中,通常會在類中設計屬性來儲存資料,例如 class foo public function getname 當乙個類的屬性很多時,這種 setname getname 的工作量就會增加。利用 set get 的過載功能 在 php 中,對乙個不存在...

php資料庫操作

獲取鏈結 conn mysql connect localhost root root 測試當前連線的預設字符集名稱。charset mysql client encoding conn echo charset echo if conn else 設定gbk 就不會出現亂碼 雖然專案用的是utf ...

php資料庫操作

連線資料庫 header content type text html charset utf 8 define hostname localhost define username bestpool define password 123456 define database guess x co...