PHP Data Access Object

Ich versuche herauszufinden, wenn ich mit der DAO-pattern korrekt und konkret wie Abstrakt db Ausdauer sollte durch die Zeit, die Sie bekommt, um meine mapper-Klassen. Ich bin mit PDO als data-access-Abstraktion-Objekt, aber manchmal Frage ich mich, wenn ich versuche zu abstrahieren, dass Abfragen zu viel.

Habe ich nur aufgenommen, wie ich bin, abstrahiert select-Abfragen, aber ich habe geschrieben, Methoden für alle CRUD-Operationen.

class DaoPDO {

    function __construct() {

        //connection settings
        $this->db_host   = '';
        $this->db_user   = ''; 
        $this->db_pass   = ''; 
        $this->db_name   = '';


    }

    function __destruct() {

        //close connections when the object is destroyed
        $this->dbh = null;

    } 


    function db_connect() {

        try { 

            /**
             * connects to the database -
             * the last line makes a persistent connection, which
             * caches the connection instead of closing it 
             */
            $dbh = new PDO("mysql:host=$this->db_host;dbname=$this->db_name", 
                            $this->db_user, $this->db_pass, 
                            array(PDO::ATTR_PERSISTENT => true));


            return $dbh;

        } catch (PDOException $e) {

            //eventually write this to a file
            print "Error!: " . $e->getMessage() . "<br/>";
            die();

        }


    } //end db_connect()'



    function select($table, array $columns, array $where = array(1=>1), $select_multiple = false) {

        //connect to db
        $dbh = $this->db_connect();

        $where_columns  = array();
        $where_values   = array();

        foreach($where as $col => $val) {

            $col = "$col = ?";

            array_push($where_columns, $col);
            array_push($where_values, $val);

        }


        //comma separated list
        $columns = implode(",", $columns);

        //does not currently support 'OR' arguments
        $where_columns = implode(' AND ', $where_columns);



        $stmt = $dbh->prepare("SELECT $columns
                               FROM   $table
                               WHERE  $where_columns");


        $stmt->execute($where_values);

        if (!$select_multiple) {

            $result = $stmt->fetch(PDO::FETCH_OBJ);
            return $result;

        } else {

            $results = array();

            while ($row = $stmt->fetch(PDO::FETCH_OBJ)) {

                array_push($results, $row);

            }

            return $results;

        }



    } //end select()


} //end class

So, meine zwei Fragen:

  1. Ist dies die richtige Verwendung des DAO, oder bin ich falsch es ist Zweck?

  2. Ist die Abstraktion der query-Prozess in diesem Maße unnötig, oder gar unüblich? Manchmal habe ich das Gefühl, ich bin zu versuchen, die Dinge zu einfach...

InformationsquelleAutor jerry | 2012-06-29

Schreibe einen Kommentar