///PHP MongoDB Kullanımı babacanlar ///

Köstebek-02

Yaşayan Forum Efsanesi
6 May 2008
15,580
45
Köstebek
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 plaincopy to clipboardprint?


  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 plaincopy to clipboardprint?


  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. :)
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 plaincopy to clipboardprint?


  1. try {
  2. // Mongo Sunucusuna bağlanalım
  3. $mongo = new MongoClient('mongodb://127.0.0.1:27017');
  4. // Veritabanını Seçelim
  5. $db = $mongo->selectDB('TestDb');
  6. } catch(MongoConnectionException $e) {
  7. die('Baglanti Kurulamadi : ' . $e->getMessage());
  8. }

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


  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 plaincopy to clipboardprint?


  1. db.createCollection('uyeler');

komutu ile Collection oluşturabilirsiniz. Varolan collection'ları listelemek için;
view plaincopy to clipboardprint?


  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 plaincopy to clipboardprint?


  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 plaincopy to clipboardprint?


  1. // Uyeler Isimli Collection'ı Secelim
  2. $uyeler = new MongoCollection($db, 'uyeler');
  3. // Toplam Uye Sayisini Ekrana Basalim.
  4. printf('<p>Toplam Uye : %s</p>',$uyeler->count());
  5. // Tum uyeleri cekelim.
  6. $uyeListesi = $uyeler->find();
  7. // Cektigimiz kayitlari listeleyelim.
  8. foreach($uyeListesi as $uye) {
  9. printf('Nick : %s | Web : %s <br>', $uye['nick'], $uye['web']);
  10. }

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 plaincopy to clipboardprint?


  1. // Kosulu tanimliyorum.
  2. $where = array('ad' => 'shadow');
  3. // Siralamayi belirliyorum. (1 : ASC , -1 : DESC)
  4. $orderBy = array('kayitTarihi' => 1);
  5. // Kayitlari Cekiyorum.
  6. $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 plaincopy to clipboardprint?


  1. // Uye bilgilerini tanimliyorum.
  2. $yeniUye = array(
  3. 'nick' => 'shadow-mavi',
  4. 'web' => 'www.shadow-mavi.com'
  5. );
  6. try {
  7. $uyeler->insert($yeniUye);
  8. } catch(MongoCursorException $e) {
  9. die('Yeni uye eklenirken teknik bir sorun olustu! > ' . $e->getMessage());
  10. }

MONGODB İLE KAYIT GÜNCELLEME
Collection içerisinden kaydı güncellemek istiyorsanız;
view plaincopy to clipboardprint?


  1. // Guncelleyecegim kaydin kosulunu belirliyorum
  2. $where = array('nick' => 'shadow-mavi');
  3. // Guncellenecek alanini belirliyorum.
  4. $yeniBilgi = array('nick' => 'shadow');
  5. // Kaydi degistiyorum.
  6. $uyeler->update($where, $yeniBilgi);

MONGODB İLE KAYIT SİLME
Varolan Collection içerisinden kaydı silmek istiyorsanız;
view plaincopy to clipboardprint?


  1. // Silecegim kaydin kosullarini belirliyorum
  2. $where = array('nick' => 'shadow-mavi');
  3. // Kaydi collection icerisinden siliyorum.
  4. $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.

editlenmiştir....
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.