Mysql
 sql >> база данни >  >> RDS >> Mysql

Използване на ЗНП в часовете

Можете да инстанцирате вашата връзка с базата данни в клас, който имплементира единичния модел. Връзката ще бъде извършена веднъж и този клас ще бъде лесно достъпен от всички ваши други обекти/скриптове.

използвам клас, наречен "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
}

този клас взема параметри от статичен клас, наречен "Config", където можете да съхранявате вашата конфигурация:

<?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');

във всичките си скриптове/обекти просто трябва да получите екземпляр на Core и след това да заявите DB

$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....

Ако имате нужда от повече информация относно singleton, вижте PHP doc 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. Каква е грешката Всяка извлечена таблица трябва да има свой собствен псевдоним в MySQL?

  2. Каква е разликата между използването на INDEX срещу KEY в MySQL?

  3. Сравнете само ден и месец с поле за дата в mysql

  4. Как да настроите MySQL репликация в RHEL, Rocky и AlmaLinux

  5. Как да премахнете стойността по подразбиране на колоната в MySQL