Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中创建DAO的正确方法_Php_Mysql_Dao - Fatal编程技术网

在PHP中创建DAO的正确方法

在PHP中创建DAO的正确方法,php,mysql,dao,Php,Mysql,Dao,从OOP的角度来看,在php中创建DAO(数据访问对象)的正确方法是什么 例如(使用Account作为基本示例),my AccountDAO将具有以下一些功能: GetAllAccounts GetAccountByID UpdateAccount deleteCount InsertAccount 因此,一旦我获取了数据库中的所有帐户,我是否应该将它们作为帐户对象数组返回给调用者?我应该只返回mysql结果集吗 你知道刀的好例子吗 为此,您可以创建一个包含3个方法的类:一个用于创建到数据库

从OOP的角度来看,在php中创建DAO(数据访问对象)的正确方法是什么

例如(使用Account作为基本示例),my AccountDAO将具有以下一些功能:

  • GetAllAccounts
  • GetAccountByID
  • UpdateAccount
  • deleteCount
  • InsertAccount
因此,一旦我获取了数据库中的所有帐户,我是否应该将它们作为帐户对象数组返回给调用者?我应该只返回mysql结果集吗


你知道刀的好例子吗

为此,您可以创建一个包含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();

?>


希望这对您有所帮助

您正在正确的轨道上构建DAO:您列出的方法肯定是DAO的一部分

为了回答您的特定问题,DAO不应该泄漏任何特定于数据库的对象,它可以泄漏一些数据库概念,尽管它们不是特定于数据库供应商的

因此,不应该返回MySQL结果集。但是您可以创建一个通用的结果集,它封装了一个MySQL结果集,并且可以处理更高级别的概念(提取整个对象而不是提取列)


编辑:我的目的不是引导您实际构建一个结果集包装器,您也可以简单地返回一个像您最初建议的那样的对象数组。这只是一个示例。

您不仅不应该使用
mysql*
扩展,而且您的示例不允许在不显式更改代码的情况下更改连接详细信息。我认为OP是在寻找DAO(用于访问数据库中的一个特定表),而不是数据库类。非常感谢,我在ASP世界中做过一些这类工作,但到目前为止,我所有的PHP脚本都是基本的过程脚本。我正在尝试将我的php应用程序转换为oop php应用程序。“在DAO中,您不应该返回MySQL结果集。但您可以创建一个通用结果集。”这不是存储库作业吗?返回泛型对象的步骤