Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Stosowanie PDO na zajęciach

Możesz utworzyć instancję połączenia z bazą danych w klasie, która implementuje wzorzec singleton. Połączenie zostanie wykonane raz, a ta klasa będzie łatwo dostępna dla wszystkich innych obiektów/skryptów.

w poniższym przykładzie używam klasy o nazwie „Core”;

class Core
{
    public $dbh; // handle of the db connexion
    private static $instance;

    private function __construct()
    {
        // building data source name from config
        $dsn = 'pgsql:host=' . Config::read('db.host') .
               ';dbname='    . Config::read('db.basename') .
               ';port='      . Config::read('db.port') .
               ';connect_timeout=15';
        // getting DB user from config                
        $user = Config::read('db.user');
        // getting DB password from config                
        $password = Config::read('db.password');

        $this->dbh = new PDO($dsn, $user, $password);
    }

    public static function getInstance()
    {
        if (!isset(self::$instance))
        {
            $object = __CLASS__;
            self::$instance = new $object;
        }
        return self::$instance;
    }

    // others global functions
}

ta klasa pobiera parametry ze statycznej klasy o nazwie "Config", w której możesz przechowywać swoją konfigurację:

<?php
class Config
{
    static $confArray;

    public static function read($name)
    {
        return self::$confArray[$name];
    }

    public static function write($name, $value)
    {
        self::$confArray[$name] = $value;
    }

}

// db
Config::write('db.host', '127.0.0.1');
Config::write('db.port', '5432');
Config::write('db.basename', 'mydb');
Config::write('db.user', 'myuser');
Config::write('db.password', 'mypassword');

we wszystkich swoich skryptach / obiektach wystarczy pobrać instancję Core, a następnie wysłać zapytanie do bazy danych

$sql = "select login, email from users where id = :id";

try {
    $core = Core::getInstance();
    $stmt = $core->dbh->prepare($sql);
    $stmt->bindParam(':id', $this->id, PDO::PARAM_INT);

    if ($stmt->execute()) {
        $o = $stmt->fetch(PDO::FETCH_OBJ);
        // blablabla....

Jeśli potrzebujesz więcej informacji o singletonie, zajrzyj do dokumentacji PHP http://php .net/manual/en/language.oop5.patterns.php



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieją wady używania ogólnego varchar(255) dla wszystkich pól tekstowych?

  2. Zapytanie MySQL Ciąg zawiera

  3. Jak połączyć się z MySQL na Amazon EC2 z poziomu Windows?

  4. Napraw „BŁĄD 1054 (42S22):Nieznana kolumna „…” w „klauzula zamówienia” podczas używania UNION w MySQL

  5. Ściągawka z wydajnością MySQL