使用singleton类在php中建立数据库连接

时间:2011-07-29 12:25:39

标签: php oop singleton

任何人都可以指导我使用单例类在PHP中建立数据库连接的示例代码。

5 个答案:

答案 0 :(得分:3)

class DatabaseSingleton
{
  // [Singleton]
  private static $instance = null;
  public static function getInstance()
  {
    if (!self::$instance)
    {
      self::$instance = new self();
    }
    return self::$instance;
  }
  private function __clone(){}
  // [/Singleton]

  private $connection = null;

  private function __construct()
  {
    $this->connection = mysql_connect('localhost','root','admin');
    if ($this->connection)
    {
      mysql_select_db('my_database');
    }
  }

  //
  // crud operations go here.
  //
}

$db = DatabaseSingleton::getInstance();
$db->SomeCRUDOperation();

也许是这样的?非常基础,但应该给你一个起点。

答案 1 :(得分:1)

这就是单身模式的样子:

 <?php
 class SingletonClass
 {
     static private $instance = null;

 static public function getInstance()
 {
     if (null === self::$instance) {
         self::$instance = new self;
     }
     return self::$instance;
 }

 private function __construct(){}
 private function __clone(){}


}

$singletonClass = SingletonClass::getInstance();

现在您可以在其中放置处理数据库内容的随机函数和参数。我希望能回答你的问题。

答案 2 :(得分:1)

有关如何实施Singleton模式的示例,请参阅手册:http://www.php.net/manual/en/language.oop5.patterns.php

然后在类构造函数中建立数据库连接。

答案 3 :(得分:0)

我使用这样的东西:

  class DBConn
    {
        static private $_db = null; // The same PDO will persist from one call to the next
        private function __construct() {} // disallow calling the class via new DBConn
        private function __clone() {} // disallow cloning the class
        /**
         * Establishes a PDO connection if one doesn't exist,
         * or simply returns the already existing connection.
         * @return PDO A working PDO connection
         */
        static public function getConnection()
        {
            if (self::$_db == null) { // No PDO exists yet, so make one and send it back.
                try {
                    self::$_db = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS);
                } catch (PDOException $e) {
                    // Use next line for debugging only, remove or comment out before going live.
                    // echo 'PDO says: ' . $e->getMessage() . '<br />';
                    // This is all the end user should see if the connection fails.
                    die('<h1>Sorry. The Database connection is temporarily unavailable.</h1>');
                } // end PDO connection try/catch
                return self::$_db;
            } else { // There is already a PDO, so just send it back.
                return self::$_db;
            } // end PDO exists if/else
        } // end function getConnection
    } // end class DBConn


    /**
     * And you can use it as such in a class
     * */

     class Post {
        public function __construct(){
             $this->db = DBConn::getConnection();
        }
        public function getPosts()
        {
            try {
                /*** The SQL SELECT statement ***/
                $sql = "SELECT * FROM posts";
                foreach ($this->_dbh->query($sql) as $row) {
                    var_dump($row);
                }
                /*** close the database connection ***/
                $this->_dbh = null;
            } catch (PDOException $e) {
                echo $e->getMessage();
            }
        }
    }

答案 4 :(得分:0)

我正在使用下面的内容

class Database 

{   

 private $_connection;

    private static $_instance; //The single instance

    private $_host = "HOST";

    private $_username = "USERNAME";
    private $_password = "PASSWORd";
    private $_database = "DATABASE";


    public static function getInstance() {
        if(!self::$_instance) { // If no instance then make one
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    private function __construct() {
        $this->_connection = new mysqli($this->_host, $this->_username, 
            $this->_password, $this->_database);

        // Error handling
        if(mysqli_connect_error()) {
            trigger_error("Failed to conencto to MySQL: " . mysqli_connect_error(),
                 E_USER_ERROR);
        }
    }

    // Magic method clone is for prevent duplication of connection
    private function __clone() { }

    public function getConnection() {
        return $this->_connection;
    }

}


$db = Database::getInstance();

$mysqli = $db->getConnection();

$sql_query = "SELECT foo FROM  etc";

$result = $mysqli->query($sql_query);