MySQL классы доступа в PHP - PullRequest
       12

MySQL классы доступа в PHP

0 голосов
/ 28 апреля 2010

У меня есть класс соединения для MySQL, который выглядит следующим образом:

class MySQLConnect
{
    private $connection;
    private static $instances = 0;

    function __construct()
    {
        if(MySQLConnect::$instances == 0)
        {
            //Connect to MySQL server
            $this->connection = mysql_connect(MySQLConfig::HOST, MySQLConfig::USER, MySQLConfig::PASS)
                or die("Error: Unable to connect to the MySQL Server.");
            MySQLConnect::$instances = 1;
        }
        else
        {
            $msg = "Close the existing instance of the MySQLConnector class.";
            die($msg);
        }
    }

    public function singleQuery($query, $databasename)
    {
        mysql_select_db(MySQLConfig::DB, $this->connection)
            or die("Error: Could not select database " . MySQLConfig::DB . " from the server.");
        $result = mysql_query($query) or die('Query failed.');
        return $result;
    }

    public function createResultSet($query, $databasename)
    {
        $rs = new MySQLResultSet($query, MySQLConfig::DB, $this->connection ) ;
        return $rs;
    }

    public function close()
    {
        MySQLConnect::$instances = 0;
        if(isset($this->connection) ) {
                mysql_close($this->connection) ;
                unset($this->connection) ;
        }
    }

    public function __destruct()
    {
        $this->close();
    }
}

Класс MySQLResultSet выглядит следующим образом:

class MySQLResultSet implements Iterator
{
    private $query;
    private $databasename;
    private $connection;
    private $result;

    private $currentRow;
    private $key = 0;
    private $valid;

    public function __construct($query, $databasename, $connection)
    {
        $this->query = $query;
        //Select the database
        $selectedDatabase = mysql_select_db($databasename, $connection)
            or die("Error: Could not select database " . $this->dbname . " from the server.");
        $this->result = mysql_query($this->query) or die('Query failed.');
        $this->rewind();
    }

    public function getResult()
    {
        return $this->result;
    }

//  public function getRow()
//  {
//      return mysql_fetch_row($this->result);
//  }

    public function getNumberRows()
    {
        return mysql_num_rows($this->result);
    }

    //current() returns the current row
    public function current()
    {
        return $this->currentRow;
    }

    //key() returns the current index
    public function key()
    {
        return $this->key;
    }

    //next() moves forward one index
    public function next()
    {
        if($this->currentRow = mysql_fetch_array($this->result) ) {
            $this->valid = true;
            $this->key++;
        }else{
            $this->valid = false;
        }
    }

    //rewind() moves to the starting index
    public function rewind()
    {
        $this->key = 0;
        if(mysql_num_rows($this->result) > 0) 
        {
            if(mysql_data_seek($this->result, 0) ) 
            {
                $this->valid = true;
                $this->key = 0;
                $this->currentRow = mysql_fetch_array($this->result);
            }
        }
        else
        {
            $this->valid = false;
        }
    }

    //valid returns 1 if the current position is a valid array index
    //and 0 if it is not valid
    public function valid()
    {
        return $this->valid;
    }
}

Следующий класс является примером того, как я обращаюсь к базе данных:

class ImageCount
{
    public function getCount()
    {
        $mysqlConnector = new MySQLConnect();
        $query = "SELECT * FROM images;";
        $resultSet = $mysqlConnector->createResultSet($query, MySQLConfig::DB);
        $mysqlConnector->close();
        return $resultSet->getNumberRows();
    }
}

Я использую класс ImageCount следующим образом:

if(!ImageCount::getCount())
{
    //Do something
}

Вопрос: Это нормальный способ доступа к базе данных? Кто-нибудь может порекомендовать альтернативный метод, если он плохой?

Спасибо вам.

Ответы [ 2 ]

2 голосов
/ 28 апреля 2010

Привет, Майк, нет ничего плохого в том, чтобы реализовывать свои собственные классы для обработки соединения с базой данных, то, что у тебя пока хорошо, но PHP уже предоставляет интерфейс для обработки соединений с БД независимо от того, с каким менеджером баз данных ты соединяешься.Я бы порекомендовал вам взглянуть на него http://www.php.net/manual/en/book.pdo.php, поскольку он имеет в основном все функциональные возможности, необходимые для обработки запросов, операторов, наборов результатов, ошибок и т. Д.

Cheers, M.

0 голосов
/ 28 апреля 2010

Я не уверен, что наличие класса с именем «ImageCount» действительно необходимо. Если вы собираетесь работать с изображениями - у меня просто будет класс с именем «Изображение» со статической функцией для подсчета всех изображений и некоторые другие функции для работы с изображениями.

Кроме того, если вы попытаетесь создать новый экземпляр, когда он существует, как насчет возврата существующего экземпляра вместо использования die () для остановки программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...