資料庫連線類的設計
**系統中的資料是存放在資料庫中,所以就無法避免地要對資料庫進行頻繁的讀寫操作。雖然 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...