PHP: MySQL Bağlantı Değişkeniyle başa çıkmak

4 Cevap php

Ben bir mysqli nesnesi oluşturmak kez değişken db_conn $ ile başa çıkmak için en iyi yolu nedir?

Kullanarak oldum

$GLOBALS['_sql'] = new mysqli(...);

Ama bu kirli görünüyor. Gördüğüm alternatif sürekli onu çağırır her fonksiyon için bağlantı VAR geçen olmaktır, ama bu büyük bir ağrı var.

4 Cevap

Ben genellikle diyebileceğim bir Singleton sınıf kullanabilirsiniz DatabaseManager. Denilen statik ortak yöntem yaparak getDB(), ben her yerde mevcut olacak gibi, etrafında veritabanını geçen hakkında endişelenmenize gerek asla. Burada kısa bir taslaktır bulunuyor:

class DatabaseManager
{
    private static $instance;
    private $db_connection;

    public initDBConnection($connectionInfo) {
          //make connection
    }

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

    public static function getDB() 
    {
         return self::getInstance()->db_connection;
    }

}

Eğer bir veritabanı bağlantısı başlatılır sonra, sadece veritabanı bağlantısı almak için DatabaseManager::getDB() arayabilirsiniz.

Bu yaklaşımın güzelliği kolayca birden fazla veritabanı bağlantıları yönetmek yanı sıra, herhangi bir veritabanına açık birden fazla bağlantı var asla sağlamak için genişletilmiş olmasıdır. Lütfen bağlantıları çok verimli hale getirir.

Size app bir daha nesne yönelimli yaklaşım alarak düşündünüz mü? PHP kodu sınıfa organize edilirse, o zaman sadece bir kez (örneğin yapıcı) örnek veritabanı bağlantısı geçmesi gerekiyor ve daha sonra kolayca örneğin, o sınıfın bütün yöntemler erişebilirsiniz $this->_sql.

Ne gibi bir şey hakkında

class Db {

    public static function factory() {

         return new Db();
    }

    public function __construct() {

         // Set up DB connection here
    }

}

gibi kullanım

Db::factory()->query('DELETE FROM users WHERE active = 0');

tabii ki bir sorgu yöntemi programlamak gerekir.

Ben onu görmek yolu, onu etrafında geçen 3 seçenek gidecekseniz.

  • Alex gibi bir Singleton, önerdi.
  • $ _Global Saklayarak.
  • Bir parametre olarak geçen etrafında.

Şahsen ben Singleton ile gitmek istiyorum. Sadece doğru gelmiyor $ _Global kullanarak, ve bir parametre olarak geçirerek sadece çok can sıkıcı bir durum.