Merhabalar bu yazımda; php ile veritabanı bağlantısı nasıl yapılır ? Php MySQL veritabanı bağlantısı uzak sunucu ile nasıl yapılır ? Php ile veritabanı bağlantısı yaparken hangi yolu tercih etmeliyiz ? En iyi performans/güvenlik hangisinde ? gibi sorulara yanıt arıyor olacağız.Lafı cok uzatmadan başlayalım;
Php ile veritabanı seçimi olarak en çok tercih edilen MySQL’dir.İlk olarak MySQL bağlantısı nasıl yapılır ? sorusuna yanıt arayacak olsakta farklı veritabanlarıyla bağlantılarıda inceliyor olacağız.
Php ile database bağlantısı kurmanın 2 farklı yolu bulunuyor.Bunlar PDO(PHP DATA OBJECT) ve MYSQLİ(MYSQL Improved) olarak biliniyor.
İkisinin arasındaki farkı soracak olursanız, PDO’nun aynı yazılım içerisinde birden fazla veritabanı bağlantı barındırabiliyor olmasıdır.Yani birden fazla platform ve birden fazla veritabanı.Vuvv, bi hayli hoş bi özellik ama dahasıda var.
PDO VERİTABANI BAĞLANTISI ile başlamak istiyorum;
try {
$db=new PDO("mysql:host=localhost;dbname=veritabaniadi",'kullaniciadi','sifre');
$db->exec("SET CHARACTER SET utf8");
$db->query("SET NAMES 'utf8'");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "Giris Basarisiz" .$e->getMessage();
}
MSQLi BAĞLANTI KODLARIMIZ;
Try{
$db=mysqli_connect('server adresi', 'kullaniciadi', 'sifre', 'veritabaniadi');
$db= mew mysqli('server adresi', 'kullaniciadi', 'sifre', 'veritabaniadi');//nesne yönemli yol (OOP)
}
catch (PDOException $e) {
echo "Giris Basarisiz" .$e->getMessage();
}
Php ile veritabanı bağlantısı konusunda dikkat etmeniz gereken charset'i uft8 yapmanız aksi takdirde türkçe karakter sorunları yaşamanız olasıdır.
Peki php ile uzak bir database’ye bağlanmamız gerekiyorsa ne yapacağız ? Burada öncelikle servis sağlayıcınızın onay vermesi gerekiyor.
Yani kullandığınız serverdan uzak MySQL bağlantısı izni vermelisiniz eğer cPanel kullanıyorsanız giriş yaptıktan sonra Veritabanları altında Uzak MySQL kısmına girin.
Sonrasında uzak MySQL bağlantısı yapmak için gelen tüm bağlantılara izin vermek istiyorsanız “%” işaretini izinli listesine ekleyin.
Burada ip olarakta seçenek verilmiş, daha private bir seçenek için kullanılabilir.
Gerekli izinleri sağladıktan sonra server ip si veya domain adını MySQL ile uzak veritabanı bağlantısı için connection cümlenizde host kısmına yazmanız yeterli olucaktır.
İlk başta şunu söylemeliyim ki PDO her türlü MYSQLİ’yi alt edebilecek şekilde donanımlıdır.
MySQLi veritabanı desteği olarak sadece MYSQL’i desteklerken PDO 12 Farklı sürücüyle, 18 adet veritabanı destekleyebiliyor olmasıyla bize yanıt veriyor bunlardan bazıları;
PDO’nun şu anda desteklediği sürüclerin tam listesini almak için
Var_dump(PDO::getAvailableDrivers());
Peki PDO’nun veritabanı bağlantısı yaparken 12 farklı sürücüyü desteklemesinin bize ne gibi bir avantajı olabilir ?
Örnek veriyorum MySQL ile geliştirdiğiniz bir projeniz var diyelim, ilerleyen süreçlerde veritabanı değiştirmeniz gerekti yahut sistem değişikliği/platform değişikliği yaptınız.İşte burada PDO’nun size sunmuş olduğu esnek yapı size hayati önem taşıyan kolaylıklar sağlıyor.
PDO ile veritabanı bağlantı cümlesini ve bir kaç sorguyu güncelleyerek projenizi kullanmaya devam edebilirsiniz fakat MySQLi kullanıyorsanız tüm sorguları tekrar tekrar yazmanız gerekicekti,
ayrıca PDO’da adlandırılmış parametreler bulunuyorken MySQLi’de malesef böyle bir seçenek yok.
Adlandırılmış parametre’de ne kardeşim ? Size en basitinden şöyle açıklayabilirim. Prepare ile sorguyu hazırlarken kullandığımız sırayı MySQLi’de takip etmemiz gerekirken, PDO’da bir diziye atayıp parametre olarak diziyi gönderebiliyoruz MySQLi'dede dizi gönderilebilir yanlış anlaşılmasın ama dizi sorgu sıralamasıyla aynı olmalıdır.Uzun sorgularda kolaylık sağlayacağı aşikar !
Peki PDO mu MYSQLi mi Hızlıdır ? Hangisi daha güvenlidir ?
Güvenlik konusunda dert etmenize gerek yok ikiside güvenlidir, extra güvenlik önlemleri almak sizi SQL enjeksiyon vb. kötü amaçlara karşı koruyacaktır.
Hız konusunda MYSQLi yapısı gereği %2.5 civarlarında PDO’dan daha hızlı ama sonuç olarak bu rekabette kazanan taraf PDO olucaktır.
Eğer hala MySQLi kullanıyorsanız belkide PDO’ya geçmenizin vakti gelmiştir. J