Soru: PHP ile MySQL bağlantısı yaparken kaç kez bağlantı açmak gerekiyor?
Cevap: Database sayısı kadar yani 1 database varsa 1 bağlantı üzerinden her işinizi görebilirsiniz.
Başkalarının kodlarını incelerken sıklıkla gördüğüm; fonksiyon içlerinde ya da ayri dosyalarda ne zaman bir database bağlantısına ihtiyaç olsa hemen mysql_connect fonksiyonun çağrılması ve database bağlantısı açılması. Evet, kesinlikle iş görüyor, fakat olması gereken bu mudur? Ne gibi sakıncaları vardır?
1. Konfigürasyonun zorlaşması: Scriptte bir değişlik yapmanız gerekiyor; farz edelim mysql username değişti, ne yapmalısınız? Bağlantı yaptığınız her yerde username’i değiştirmelisiniz. Bunun için bir fonksiyon yazdınız ise nispeten şanlısınız sadece fonksiyonun içinde değiştirmeniz sizi bundan kurtaracaktır ya da bağlantı parametrelerini değişkenlere yüklendiniz ise sadece bunları değiştireceksiniz.
2. Kaynakları boşa harcama: Diyelim ki fonksiyon yazdınız, fakat bunu her ihtiyacınız olduğunda çağırarak tekrar bağlantı açılmasına neden oluyorsunuz bu da size zaman ve kaynak kaybı olarak geri dönecektir. Yani bir bağlantı harcadığınızda 1ms geçiyorsa 10 bağlantı için 10 ms geçecektir. Neyse ki php coderlari bunu düşünmüş ve kazın ayağı tam olarak böyle değil, bağlantı açıldığında eğer daha önce aynı parametreler ile bir bağlantı açılmışsa php yeni bir bağlantı açmayacak ve var olan bağlantıyı kullanacaktır, fakat bu durumda da mysql_select_db icin halen bir kayıp söz konusu. Aynı zamanda mysql_close yapıyorsanız veya bağlantı açarken link_identifier belirti iseniz. php yeni bağlantılar açacaktır yani yukarda verdiğim 1’e 10’luk örnek geçerli olacaktır. Bu kayiplar ms’ler mertebelerinde olduğu için pek önemsenmez. Döngü içinde 10.000, 100.000, 1 milyon bağlantı açıyorsanız bu ms’ler önem kazanmaya başlar, tabiki bu durumda kod yazarlığınızdan şüphe etme vakti gelmiştir.
Kod yazarken olabildiğince kodu tek bir noktada toplamaya çalışmalısınız, mesela bir bağlantı fonksiyonu yazdınız, bu fonksiyonu header.php, init.php gibi tek bir dosyada bir kez çağırdınız. Bu sizi her scriptinizde find/replace yapmaktan kurtaracaktır aynı zamanda bir (1) kez çağırmış ve yazmış olacaksınız.