2012-06-15 22 views
5

從OOP的角度來看,在PHP中創建DAO(數據訪問對象)的正確方法是什麼?在PHP中創建DAO的正確方法

例如(使用帳戶作爲一個基本的例子),我AccountDAO將有以下的一些功能:

  • GetAllAccounts
  • GetAccountByID
  • UpdateAccount
  • DeleteAccount
  • InsertAccount

因此,一旦我獲取數據庫中的所有帳戶,是否應該將它們作爲帳戶對象數組返回給調用方?我應該只返回mysql結果集?

你知道任何一個DAO的好例子嗎?

回答

-1

爲此,您可以創建包含3種方法之一是創建連接到數據庫中的類,第二個是接近執行SQL查詢

<?php 
class Database{ 

    public function con_open(){ 
     $con = mysql_connect("domain","username","password"); 
      if (!$con) 
      { 
       die('Could not connect: ' . mysql_error()); 
      } 
     mysql_select_db("db_name", $con); 
    } 

    public function query($sql){ 
     $result = mysql_query($sql); 
      if(!$result){ 

      }else{  
        return $result; 
       } 
    } 

    public function fetch($result){ 
     $row = mysql_fetch_array($result); 
     return $row; 
    } 

    public function con_close(){ 
     mysql_close($con); 
    } 
} 


$db = new Database(); 

?> 

希望這將有助於你的連接,第三個

+2

不僅應該使用'mysql_ *'擴展名,但是您的示例不允許在不明確更改代碼的情況下更改連接詳細信息。 – cspray

+2

我認爲OP正在尋找一個DAO(用於訪問數據庫中的一個特定表),而不是數據庫類。 – AdmiralAdama

0

您正在構建DAO的正確方向:您列出的方法絕對應該是DAO的一部分。

要回答您的具體問題,DAO不應該泄漏任何數據庫特定的對象,但只要它們不是特定於數據庫供應商的,它可以泄漏一些數據庫概念。

所以不,你不應該返回一個MySQL結果集。但是你可以創建一個通用的結果集來包裝MySQL結果集,並且可以與更高層次的概念一起工作(提取整個對象而不是提取列)。

編輯:我的目的不是讓你實際構建一個結果集包裝器,你也可以簡單地返回一個像你最初建議的對象數組。這只是一個例子。

+0

非常感謝,我在ASP世界中完成了一些這類工作,但是迄今爲止我所有的PHP腳本都是基本的程序腳本。我試圖把我的PHP應用程序變成oop php應用程序。 – carlg

相關問題