2012-09-21 18 views
5

PHP geliştirmelerim için Zend Framework kullanıyorum ve burada bir sorguyu yürütmek için kullandığım küçük bir işlev var. Bu bir hata ile ilgili değil. Kod ve her şey iyi çalışıyor. Ama bunun arkasındaki bazı kavramları bilmek istiyorum.Zend DB Veritabanı Bağlantılarını Yönetme

/** 
    * Get dataset by executing sql statement 
    * 
    * @param string $sql - SQL Statement to be executed 
    * 
    * @return bool 
    */ 
    public function executeQuery($sql) 
    { 
     $this->sqlStatement = $sql; 

     if ($this->isDebug) 
     { 
      echo $sql; 
      exit; 
     } 

     $objSQL = $this->objDB->getAdapter()->prepare($sql); 

     try 
     {   
      return $objSQL->execute(); 

     } 
     catch(Exception $error) 
     { 

      $this->logMessage($error->getMessage() . " SQL : " .$sql); 
      return false; 
     } 
     return false; 
    } 

Körük benim için belirsiz bölgelerdir.

  1. Nasıl Zend_Db_Table_Abstract Veritabanı bağlantılarını koruyun?
  2. Bu işlevi çağırdığımda her zaman yeni bir bağlantı mı oluşturuyor veya Bağlantı havuzu var mı?
  3. Veritabanı bağlantısını açmak veya kapatmak için kod yazmamıştım. Çerçeve otomatik olarak bağlantıları yakınlaştıracak mı?
  4. Eğer bu işlevi yürütürsem, bu açık ve kapalı bağlantı sürekli çalışıyorsa, herhangi bir performans sorunu var mı?

Bu konuda öneri ve görüşleriniz için teşekkür ederiz.

cevap

15

hemen RDBMS sunucusuna bağlanmak olmayan bir adaptör sınıfının bir örneğini oluşturma Bağlantı

oluşturuluyor. Bağdaştırıcı bağlantı parametrelerini kaydeder ve gerçek bağlantıyı istek üzerine yapar, ilk kez sorgusu yürütmeniz gerekir. Bu, bir Bağdaştırıcı nesnesi oluşturmanın hızlı ve ucuz olmasını sağlar. Uygulamanızın geçerli isteği sırasında herhangi bir veritabanı sorgusunu çalıştırmanızın gerekmediğinden emin olmanıza rağmen bir Bağdaştırıcı örneği oluşturabilirsiniz.

Bağdaştırıcıyı RDBMS'ye bağlanmak için zorlamanız gerekiyorsa, getConnection() yöntemini kullanın. Bu yöntem, ilgili PHP veritabanı uzantısı tarafından temsil edilen bağlantı için bir nesne döndürür. Örneğin, PDO sürücüleri için Bağdaştırıcı sınıflarından herhangi birini kullanırsanız, belirli bir veritabanına canlı bir bağlantı olarak başlattıktan sonra getConnection(), PDO nesnesini döndürür.

Geçersiz hesap kimlik bilgileri veya RDBMS sunucusuna bağlanma hatası nedeniyle ortaya çıkan istisnaları yakalamak istiyorsanız, bağlantıyı zorlamak yararlı olabilir. Bu istisnalar, bağlantı yapılıncaya kadar atılmaz; bu nedenle, istisnaları veritabanına karşı ilk sorgu yerine tek bir yerde ele alırsanız, uygulama kodunuzu basitleştirmeye yardımcı olabilir. Ayrıca, bir bağdaştırıcı, örneğin bir oturum değişkeninde depolamak için serileştirilebilir. Bu sadece bağdaştırıcının kendisi için değil, bir Zend_Db_Select nesnesi gibi toplayan diğer nesneler için de çok yararlı olabilir. Varsayılan olarak, bağdaştırıcıların serileştirilmesine izin verilir, istemiyorsanız, Zend_Db :: ALLOW_SERIALIZATION seçeneğini FALSE ile geçirmeyi düşünmeniz gerekir, yukarıdaki örneğe bakın. Tembel bağlantı prensibine saygılı olmak için, adaptör sıra dışı hale getirildikten sonra yeniden bağlanmayacaktır. Daha sonra getConnection() öğesini çağırmalısınız. Bağdaştırıcıyı otomatik olarak yeniden bağlamayı Zend_Db :: AUTO_RECONNECT_ON_UNSERIALIZE değerini bir bağdaştırıcı seçeneği olarak geçirerek yapabilirsiniz.

Normalde bir veritabanı bağlantısını kapatmak için gerekli değildir Bir Bağlantı Kapanış

. PHP, tüm kaynakları ve bir isteğin sonunu otomatik olarak temizler. Veritabanı uzantıları, kaynak nesneye yapılan referans temizlendikçe bağlantıyı kapatmak için tasarlanmıştır.Ancak, çok sayıda veritabanı bağlantısı başlatan uzun bir PHP betiğiniz varsa, RDBMS sunucunuzun kapasitesini tüketmekten kaçınmak için bağlantıyı kapatmanız gerekebilir. Temel veritabanı bağlantısını açıkça kapatmak için Bağdaştırıcının closeConnection() yöntemini kullanabilirsiniz.

Sürüm 1.7.2'den bu yana, halen isConnected() yöntemiyle RDBMS sunucusuna bağlı olduğunuzu kontrol edebilirsiniz. Bu, bir bağlantı kaynağının başlatıldığı ve kapatılmadığı anlamına gelir. Bu işlev şu anda örneğin bir sunucu tarafındaki bağlantıyı kapatmayı test edememektedir. Bu, bağlantıyı kapatmak için dahili olarak kullanılır. Bağlantıyı hatasız olarak birçok kez kapatmanıza izin verir. PDO bağdaştırıcıları için 1.7.2'den önceki durum zaten buydu ama diğerleri için değil.

More information