Hoşgeldin Misafir

PHP MongoDB Kullanımı

MiRaT

13 Kas 2017
2,077 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
-MongoDB, 10Gen isimli şirket tarafından açık kaynaklı olarak geliştirilen NoSQL veritabanıdır. Anlık çok fazla işlem yapmanız gerektiğinde veya önbellekleme yapmak istediğiniz de tercih edilebilir. Mobil platformlarda yer bildirimi (check-in) yapmak için çoğumuzun kullandığı foursquare altyapısında MongoDB kullanıyor. Bildiğim kadarıyla link kısaltma servisi olarak sıkça kullanılan bit.ly’de MongoDB’yi tercih ediyor.--

-Ben bu makalede varolan bir MongoDB sunucusuna PHP ile bağlanmayı ve kod örneklerini paylaşmaya çalışacağım. Eğer MongoDB kurmak istiyorsanız ---buraya tıklayarak--- işletim sisteminize uygun sürümü indirebilir ve kurabilirsiniz.--
-PHP / MONGODB SÜRÜCÜSÜ KURALIM--
-MongoDB sunucusuna bağlanabilmek için php’ye mongodb sürücüsünü tanıtmanız gerekiyor. Eğer Linux kullanıyorsanız ---buraya tıklayarak---github üzerinden kurulumu tamamlayabilirsiniz.--
-Windows ortamında MongoDB ile çalışmak istiyorsanız öncelikle ---buraya tıklayın---. Buradan çalışacağınız ortamın php sürümü, 32 / 64 bit gibi özelliklerini dikkate alarak dll dosyalarını indirin. İndirdiğiniz dll dosyaları arasından size uygun olanı seçin. (Ben Php 5.4 sürümünü barındıran 64 bit makinede çalıştığım için php_mongo-1.3.2RC1-5.4-vc9-x86_64.dll dosyasını seçtim) Ardından seçtiğiniz dosyayı Php sürücülerinin bulunduğu dizine php_mongo.dll ismiyle kopyalayın. Son olarakta php.ini dosyanıza;--
-view plain---copy to clipboard---print---?--

  1. extension=php_mongo.dll-

-satırını ekleyin. Web sunucunuzu yeniden başlattığınızda mongodb sürücüsünün php ile kullanıma hazır olduğunu göreceksiniz.--
-Not :--
-Php.ini dosyasının ve php sürücülerinin hangi dizinde bulunduğunu bilmiyorsanız phpinfo.php isimli bir dosya oluşturun ve aşağıdaki komutu ekleyin.--
-view plain---copy to clipboard---print---?--

  1. phpinfo();-

-Dosyayı çalıştırdığınızda “extension_dir” yazan bölümde php sürücülerinin, “Loaded Configuration File” yazan bölümde ise php.ini dosyanızın bulunduğu dizini görebilirsiniz.--
-ADMIN UI (YÖNETİM ARAYÜZÜ) :--
-MySQL kullandığım projelerde veritabanı yönetimi için eğer 3306 portundan remote mysql yetkim varsa ---Navicat--- isimli yazılımı kullanıyorum. Navicat ile MySQL, SQL Server, SQLite, Oracle ve PostgreSQL veritabanlarında işlem yapılabiliyor. MongoDB kullanmam gerektiğinde mongo için Admin UI araçlarını incelemeye başladım. Bir çok aracı denedim ancak çoğu yeterli ve kullanıcı dostu değildi. Denediklerim arasından kötünün iyisi olarak ---MongoVUE--- isimli aracı önerebilirim. “Keşke Navicat’in Mongo desteği bulunsaydı” dediğim zamanlar çok olduğuna göre; ya ben alışkanlıklarımı değiştirmekte zorlandım, ya da gerçekten Mongo’nun UI araçları yeterli değil. --
smile.gif

-MONGODB BAĞLANTISI KURMAK--
-MongoDB sürücümüzü PHP’ye tanıtarak kullanmaya başladığımıza göre ilk olarak mongo sunucusuna bağlanmayı deneyelim. MongoDB sunucusu ilk kurulduğunda varsayılan olarak 27017 portundan çalışıyor. Ayrıca Authentication (Kimlik Doğrulama) özelliği kapalı olarak geldiği için kullanıcı adı ve şifre bilgisi de girmeniz gerekmiyor. Host ve port bilgilerini yazarak hızlıca bağlanabilirsiniz.--
-view plain---copy to clipboard---print---?--

  1. try {-

    [*]// Mongo Sunucusuna bağlanalım-

    [*]$mongo = new MongoClient('mongodb://127.0.0.1:27017');-

    [*]// Veritabanını Seçelim-

    [*]$db = $mongo->selectDB('TestDb');-

    [*]} catch(MongoConnectionException $e) {-

    [*]die('Baglanti Kurulamadi : ' . $e->getMessage());-

    [*]}-

-Eğer Mongo sunucunuzda kimlik doğrulama özelliği aktif edilmişse bağlantı satırını aşağıdaki şekilde düzenleyebilirsiniz.--
-view plain---copy to clipboard---print---?--

  1. $mongo = new MongoClient('mongodb://kullaniciAdi:[email protected]:27017');-

-MONGODB İLE KAYITLARI LİSTELEME--
-MongoDB'de kayıtlar Collection'ların içerisinde yer alır. Collection terimini MySQL'de ki tablo olarak düşünebilirsiniz. Bir Collection içerisinde yer alan kayıtları php ile listelemeye geçmeden önce bir kaç ipucu vereyim.--
-Eğer konsol üzerinden çalışıyorsanız;--
-view plain---copy to clipboard---print---?--

  1. db.createCollection('uyeler');-

-komutu ile Collection oluşturabilirsiniz. Varolan collection'ları listelemek için;--
-view plain---copy to clipboard---print---?--

  1. show collections-

-satırını çalıştırmanız yeterlidir. Ben mongo sunucumda "uyeler" isminde bir collection oluşturdum. Bunun içerisine yine mongo konsolundan;--
-view plain---copy to clipboard---print---?--

  1. db.uyeler.insert({"nick":"shadow-mavi","web":"www.shadow-mavi.com"});-

-satırını çalıştırarak kayıtlar oluşturdum. Makalenin alt bölümlerinde PHP ile collection'a kayıt ekleme örnekleri de yer almaktadır. Şimdi uyeler collection'ı içerisinde yer alan kayıtları listeleyelim. (Yukarıda yer alan try-catch kodunu genişleterek devam edebilirsiniz)--
-view plain---copy to clipboard---print---?--

  1. // Uyeler Isimli Collection'ı Secelim-

    [*]$uyeler = new MongoCollection($db, 'uyeler');-

    [*]// Toplam Uye Sayisini Ekrana Basalim.-

    [*]printf('<p>Toplam Uye : %s</p>',$uyeler->count());-

    [*]// Tum uyeleri cekelim.-

    [*]$uyeListesi = $uyeler->find();-

    [*]// Cektigimiz kayitlari listeleyelim.-

    [*]foreach($uyeListesi as $uye) {-

    [*]printf('Nick : %s | Web : %s <br>', $uye['nick'], $uye['web']);-

    [*]}-

-Collection içerisinde yer alan tüm kayıtları çekerek döngüye dahil ettik ve ekrana bastırdık. Eğer adı "İbrahim" olan kişileri kayıt tarihine göre sıralayarak ilk 10 kişiye ulaşmak istiyorsanız;--
-view plain---copy to clipboard---print---?--

  1. // Kosulu tanimliyorum.-

    [*]$where = array('ad' => 'shadow');-

    [*]// Siralamayi belirliyorum. (1 : ASC , -1 : DESC)-

    [*]$orderBy = array('kayitTarihi' => 1);-

    [*]// Kayitlari Cekiyorum.-

    [*]$uyeListesi = $uyeler->find($where)->limit(10)->sort($orderBy);-

-komutlarını çalıştırabilirsiniz. Eğer sadece tek bir kayıt çekecekseniz find() yerine findOne() fonksiyonunu tercih edebilirsiniz.--
-MONGODB İLE KAYIT EKLEME--
-Varolan Collection içerisine yeni kayıtlar eklemek için;--
-view plain---copy to clipboard---print---?--

  1. // Uye bilgilerini tanimliyorum.-

    [*]$yeniUye = array(-

    [*]'nick' => 'shadow-mavi',-

    [*]'web' => 'www.shadow-mavi.com'-

    [*]);-

    [*]try {-

    [*]$uyeler->insert($yeniUye);-

    [*]} catch(MongoCursorException $e) {-

    [*]die('Yeni uye eklenirken teknik bir sorun olustu! > ' . $e->getMessage());-

    [*]}-

-MONGODB İLE KAYIT GÜNCELLEME--
-Collection içerisinden kaydı güncellemek istiyorsanız;--
-view plain---copy to clipboard---print---?--

  1. // Guncelleyecegim kaydin kosulunu belirliyorum-

    [*]$where = array('nick' => 'shadow-mavi');-

    [*]// Guncellenecek alanini belirliyorum.-

    [*]$yeniBilgi = array('nick' => 'shadow');-

    [*]// Kaydi degistiyorum.-

    [*]$uyeler->update($where, $yeniBilgi);-

-MONGODB İLE KAYIT SİLME--
-Varolan Collection içerisinden kaydı silmek istiyorsanız;--
-view plain---copy to clipboard---print---?--

  1. // Silecegim kaydin kosullarini belirliyorum-

    [*]$where = array('nick' => 'shadow-mavi');-

    [*]// Kaydi collection icerisinden siliyorum.-

    [*]$uyeler->remove($where);-

------
-Php ile MongoDB veritabanı üzerinde CRUD (Create Read Update Delete) işlemleri özetle bu şekilde yapılabiliyor. Daha fazla detay için ---php.net--- adresini inceleyebilirsiniz.--
-MongoDB kullandığım bir projenin hem NodeJS hem de PHP kodlamasını yapmıştım. Eğer MondoDB'yi NodeJS ile kullanmak istiyorsanız ---Mongoose--- isminde çok güzel bir ORM bulunuyor.--