Mysql Bağlantı Sınıfı

7 Cevap php

Bazı php kod yazıyorum ve ben sık sık alanları okumak ve güncelleştirmek için benim MySQL veritabanı erişim ediyorum.

Benim şu anki kod dbconnnect adında bir sınıf içerir ve aşağıdaki gibi kullanabilirsiniz:

class edit_data extends dbconnect {
//<some php code>
parent::connect();
//<get info from database>
parent::disconnect();
//<evaluate data>

Benim soru - Bu bağlamak ve bir MySQL veritabanı bağlantısını kesmek için en etkili yolu nedir? (Unutmayın, ben hemen hemen her zaman aynı veritabanına bağlanmak, bu yüzden bağlantı parametrelerini her zaman yeniden tanımlamaya gerek yoktur).

Ben o halde ben sadece yazabilirsiniz, yapıcısındaki bağlantı çalışan düşündüğünü

$connector = new dbconnect();

sağ - ama ben aslında bu yaparak çok tasarruf değilim fark?

Teşekkürler.

7 Cevap

Sadece db bağlantısı / kopukluk kodu dahil olduğunu / her dosya için ayrı ayrı yapmak gerek kalmadan, her dosyanın başında ve sonunda otomatik olarak çalışacak emin olun. Bu kodu 1 yerde saklanır ve tüm diğer dosyalar dahil olduğundan emin olun, böylece gerektiğinde kolayca değiştirebilirsiniz. Sürece bu şeyler gibi, dinlenme db / bağlantıyı kesmek için istediğiniz sadece kişisel tercihleri.

Ben de böyle her dosya için perde arkasında bu gibi ortak görevleri bakımı için böyle CodeIgniter gibi bir çerçeve tavsiye ederim.

Kullanarak

$connector = new dbconnect();

olup

parent::connect();

aslında dbconnect sınıf ile edit_data sınıf ayırımı vardır. Ne sizin için aracı olduğunu:

  1. Lütfen edit_data sınıfı şimdi birden dbconnect nesneleri kullanarak birden fazla bağlantı (bağlantı havuzu) olabilir
  2. Lütfen edit_data sınıfı (gelecekte) dbconnect başka bir şey kullanabilir ve başka kodunu değiştirmek zorunda kalmazsınız. Ebeveyn ile :: Hiç başka bir sınıfı, bazı uzanan değiştirirseniz, yeni sınıf mevcut semantiğini desteklemek emin olmak gerekir, connect ()

The "right" way would probably be to do it like the MySQLi and PDO extensions - open the connection in the constructor and close it in the destructor. The "efficient" way is to check the connection in your query() method and (r)open it if necessary.

Her ikisinde de ayrı bir connect () yöntemini oluşturma önlemek yaklaşır ve böylece komut aramak için unutma riskini kaldırmak.

Eğer her zaman veritabanına bağlamak her zaman için gidiyoruz biliyorum sürece, ben yapıcı bağlantı parçası koymak olmaz. Bağlanmak için ihtiyacınız yoksa, sen o pahalı olmamalıdır. Sizin yapıcı yalnızca bağlantı parametrelerini kabul etmelidir. Eğer statik sınıflar kullanıyor olabilir, bu yüzden yapıcı idam alacağı gibi görünüyor olsa da.

As Krzysztof mentioned, you should connect on demand. In my database class, I have all queries eventually go through an "execQuery" function. That function checks if there is a connection to the database or not. Having a single central query function also allows you to do things like record all queries that were run in a session, add timing, logging or anything else you need to do.

Yıkıcı kesmek sahip uygun bir yerdir.

Bizim kod temeli birçok yolları vardır ve önbelleğe kullanımı bir çok yapar.

İlk sorgu çalıştırıldığında Biz sadece veritabanı ile bağlayın. (Yani aslında on -> sorgu () yöntemi).

Biz komut üzerine bir kez PHP kesmek izin ve açıkça demiyorlar -> kesmek

Size bağlantısını yeniden emin olun Arabistan'dan:

New_link parametresini gözden geçirin:

İkinci bir çağrı, aynı argümanlarla () mysql_connect yapılırsa, yeni bir bağlantı kurulacak, ancak bunun yerine, zaten açılan bağlantı bağlantı belirteci iade edilecektir. New_link parametresi mysql_connect () önce aynı parametrelerle çağrıldı bile, bu davranışı değiştirir ve mysql_connect () her zaman yeni bir bağlantıyı açmak yapar. SQL güvenli modda, bu parametre dikkate alınmaz.

http://php.net/function.mysql-connect

Ben senin "dbconnect" sınıfından sizin "edit_data" sınıf türetmek mantık karışıklığı göstermektedir düşünüyorum. Veri düzenleme veritabanı bağlantısının özel bir tür nesne mi? Ya da belki de veri düzenleme nesne bir veritabanı bağlantısını kullanmak gerekiyor demek daha mantıklı olur? (Bu, IS A ve A HAS arasındaki fark)

Artık demode düşme gibi görünüyor olsa da, veritabanı işleyicisi almak için bir tek fabrika çağrısını kullanabilirsiniz. Sonra ihtiyacı olan her işlevi sadece çağırabilirsiniz. Eğer işleyici öz-başlatılırken herhangi bir işi yapmak zorunda ilk defa yaparsanız, o zaman hiçbir şey bile başlatılıyor endişe etmemiz gerekir. (Kolu içeren örnek değişken bir kaynaktır kolu ise, bu yapmak için, check -.. Değilse, başlatıcı çağrı bağlantısı başarısız olursa ne yapacağına karar unutmayın) Sonra sadece bu yapılandırma bulmak için işleyicisi için bir yol gerekir . Ben fabrika çağrı değil initializor, bunu olurdu.

Yapıcı geçerli veritabanı işleyicisi almak ve bir örnek değişkeninde bir referansı koymak için yapmanın bir varyantı yoludur. Bu çeşitli şekillerde yapılabilir. Yapıcısı bunu gerektiren işe yarayabilir, yoksa yine tekil fabrika çağrı üzerine geri düşebilir. Bu teknik nesne yapıcı veritabanı tutacağı başlatmak olmaz eğer örnekleme inkar için bir şans (fabrika çağrı kontrol edebilirsiniz) verir.