Pazar, 22 Şubat 2009

Veritabanı Bağlantı Ayarları

 

Bu yazıda veritabanı uygulamaları geliştirmek için CodeIgniter'da atmanız gereken adımları listeleyeceğiz. CodeIgniter, veritabanı uygulamaları için birden sürücü tipini desteklemektedir. Bunlar : mysql, mysqli, postgre, odbc, mssql, sqlite, oci8 tipleridir. Genelde linux makineler üzerinde MySQL tipinde veritabanları olduğu için bu yazı MySQL tipe uygun olarak CodeIgniter 1.7.1. versiyonu için anlatılmıştır. Diğer versiyon ve veritabanı tiplerine göre kendi ayarlarınızı adapte etmeniz gereklidir.

Öncelikle application/config/autoload.php dosyasını yazı editörümüzde açıyoruz. 42. satırda geçen libraries değişkenine database değerini ekliyoruz. Böylece CodeIgniter çalışmaya başladığında veritabanı otomatik olarak yüklenecektir.

$autoload['libraries'] = array('database');

Daha sonra veritabanı bağlantı bilgilerini ayarlamak için application/config/database.php dosyasını yazı editörümüzde açıyoruz. Bu dosyada 40. satrıdan itibaren aşağıda tanımlandığı gibi kendi veritabanımıza uygun olarak ilgili değerleri giriyoruz.

$db['default']['hostname'] = "localhost";//server ip değeri 
$db['default']['username'] = "kullanici_adi";
$db['default']['password'] = "sifre_degeri";
$db['default']['database'] = "veritabani_adi";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

Şimdiye kadar yaptığımız ayarlar ile veritabanımızın olduğunu CodeIgniter'a bildirdik ve açılışta veritabanı sınıfını otomatik olarak yüklettik. Bundan sonra yapacağımız controller dosyası içinde gerektiği zaman model dosyamızı çağırmak olacaktır. Aşsağıdaki örnekte 15. satırda günlük_model.php isimli model dosyamızı çağırıyoruz. Daha sonraki satırlarda ise Model dosyamızın içindeki gunluk_getir() metodunu kullanarak veritabanımızdan bilgi çekiyor, view dosyamızda kullanmak üzere gunluk_listesi değişkenine veri atıyoruz.

class Gunluk extends Controller {

 function Gunluk()
 {
  parent::Controller();
 }
 
 function index()
 {
  $this->load->library('pagination');

  if(isset($_GET['sayfa'])) $sayfa = (int) $_GET['sayfa'];
  else $sayfa = "0"; 
  
  $this->load->model('gunluk_model', 'Model');

  $data['gunluk_listesi'] = $this->Model->gunluk_getir($sayfa);
  $data['gunluk_listesi']['sayfa_listesi'] = $this->_config_pagination($data['gunluk_listesi']['toplam']);
  
  $this->load->view('gunluk_view',$data);
 }
 
}

Bu yazımda veritabanı ayarlarının ve bağlantılarının nasıl olması gerektiğini anlattım. Yazıda geçen günlük controller dosyası ve model ile ilgili geniş bilgiye buradan ulaşabilirisiniz.

Yorumlar

autoload.php ve database.php dosyasındaki değişiklikleri yaptım. codeigniter' in veri tabanına bağlandığını nasıl kontrol ederim. İyi çalışmalar

@Hasan: Uygulamayı çalıştırdığında eğer veritabanına bağlanamazsa hata verir. Hata vermiyorsa bağlanmış demektir.

günlük_model dosyasında sql kodu dışında başka bir şey bulunuyor mu? kendi uygulamamda bu sorguda php hatası veriyor. Bir de   $this->load->library('pagination'); kodunda pagination yerine kendi oluşturduğumuz modelin ismini mi yazıyoruz.

@Hasan: CodeIgniter'da yenisin sanırım. İşe başlamadan önce Kullanım Kılavuzunu okumanı tavsiye ederim. Tüm sorularının cevabını orada bulacaksın.

Merhaba
Codeigniter ile yaptığım bir 6 adımlık bir başvuru formunda girilen verileri session olarak tutup son adımda veritabanına yazmak istiyorum. fakat bu formdan girilen verilen farklı tablolara atılıyor ve tablolardaki bilgiler birbirleriyle ilişkili. (örneğin bir tabloda kategoriler idlerle saklanıyor, diğer tabloda ürünün kategorisi id ile belirtiyor ve tek sorguda iki tablo etkileniyor) kısacası veriler tablolara gönderilirken ilk etkilenen tabloya yapılan birden fazla insert'ün idsini alıp diğer tabloya girmek istiyorum. codeigniter'ın yardım sayfasında database class'ı altında Active Record Class ve Query Caching başlıklarını gördüm. Hatta Active Record Caching diye bir başlıkta var. fakat hangisinin bu işe doğru çözüm olabileceğinden emin değilim. Bu konuda fikir verirseniz sevinirim.

Not: Sitede hakkında bir makale bulamadığım için buradan sormayı tercih ettim.

@İlker: Bu tür makale ile ilgisiz sorunlarınız için lütfen Google CodeIgniter Grubunu kullanın.

Yorum Ekle