базы данных класса расширяет одной базы данных


Я пытаюсь соответствовать стандарту кодирования Zend, а также.

EDIT 2:

<?php

/**
 *    Input   :   Query request
 *    Output  :   A row or a list of rows
 *    Notes   :
 *
 *    Provides escaping and binding via PDO library
 *    Consolidates PDO to use a single calling mechanism
 *    Consolidates all queries to an associative array
 *    Mysqli available for those who wish to implement
 */

class Database extends OneDatabase
{
    private $dbResource;
    public function __construct()  
    {
        $this->dbResource = oneDatabase::_get();
    }
    public function getResource()
    {
        return $this->dbResource;
    }
    protected $_sqlArray = array(
        "signin_pass" => "SELECT pass FROM cr WHERE email=?",
        "signin_validate" => "SELECT email,pass FROM cr WHERE email=? AND pass=?",
        "signin_flname" => "SELECT flname FROM cr WHERE email=?",
        "signup_check" => "SELECT * FROM cr WHERE email=?",  
        "signup_insert" => "INSERT INTO cr VALUES (?,?,?)",
        "signup_site1" => "INSERT INTO bo VALUES ('Facebook','http://www.facebook.com','',?)",
        "signup_site2" => "INSERT INTO bo VALUES ('Twitter','http://www.twitter.com','',?)",
        "bookmark_delete" => "DELETE FROM bo WHERE name=? AND email=? LIMIT 1",
        "bookmark_insert" => "INSERT INTO bo VALUES (?, ?,'', ?)",
        "bookmark_model" => "SELECT * FROM bo WHERE email=? ORDER BY name ASC",
        "tweet_insert" => "INSERT INTO tw VALUES (?,?,?,?)",
        "tweet_model" => "SELECT * FROM tw ORDER BY time DESC LIMIT 7",
        "create_bookmark" => "CREATE TABLE bookmark(name VARCHAR(64), url VARCHAR(256), tag VARCHAR(256), id INT)",
        "create_credentials" => "CREATE TABLE credentials(id INT NOT NULL AUTO_INCREMENT, flname VARCHAR(60), email VARCHAR(32), pass VARCHAR(40), PRIMARY KEY(id))",
        "create_tweet" => "CREATE TABLE tweet(id INT NOT NULL AUTO_INCREMENT, flname VARCHAR(60), email VARCHAR(32), pass VARCHAR(40), PRIMARY KEY(id))"
    );
    public function _pdoQuery($fetchType, $queryType, $parameterArray) 
    {
        $query=$this->_sqlArray[$queryType];
        eval("\$query = \"$query\";");
        if($parameterArray==0)
        {
            $results = oneDatabase::$_database->query($query);
            return $results;
        }
        oneDatabase::$_database->quote($query);
        $pdoStatement = oneDatabase::$_database->prepare($query);
        $pdoStatement->execute($parameterArray);
        if($fetchType=='none')
        {
            $results=NULL;
        }
        else if($fetchType=='single')
        {
            $results = $pdoStatement->fetch(PDO::FETCH_ASSOC);
        }
        else if($fetchType=='multiple')
        {
            $results = $pdoStatement->fetchAll();
        }
        return $results;
    }
    protected function _mysqliQuery($aquery) 
    {
        return oneDatabase::$_database->query($query);
    }
}


201
0
php
задан 20 ноября 2011 в 04:11 Источник Поделиться
Комментарии
1 ответ

Хорошая вещь об этом код имеет свой бодрящий стиль, который последовательно применяется и визуально привлекательным. Сейчас на некоторые улучшения:

Этот код не реализует базы данных. (Вы назвали базу данных класса, но она не будет напоминать что-то вроде базы данных). Этот класс не имеет благую цель. Если вы собираетесь написать класс базы данных, она должна обрабатывать тип базы данных вещей. Как операции или методы для Select, Insert и DELETE и т. д.

Некоторые другие вещи:


  • Это не легко повторно использовать код.

  • Он содержит жестко закодированные значения.

  • Это разрушает логическое разделение для вашей программы.

  • Не используйте функцию eval - это не хорошо для вашей безопасности применение:
    функция eval("\$запрос = \"$запроса\";");

  • одной базы данных::$_database может быть заменен на $этом->_database как вы
    расширяют этот класс.

  • в mysqli смешивается с ПДО. Просто использовать ПДО.

  • databaseCopy не требуется

  • метод доступа должен быть указан (открытых, защищенных, закрытых)

В резюме, я думаю, вы должны переосмыслить ваш дизайн.

3
ответ дан 20 ноября 2011 в 05:11 Источник Поделиться