Php ile mysqli kullanımı

Tarih: 14 Ocak 2013 Kategori: Php 11 Yorum

MySQLiÖncelikle merhaba. Bu yazıda Php 5 ile gelen yeni mysql kütüphanesi mysqli kullanımı üzerine birkaç kod paylaşacağım. Mysqli, MySQL Improved Extension (geliştirilmiş Mysql eklentisi) adının kısaltılarak yazılışıır. Mysqli kütüphanesi sisteminizde aktif değilse şu yazıyı okumanızı öneririm: http://tr.php.net/manual/tr/mysqli.installation.php . Mysqli’nin aktif olup olmadığını öğrenmek için phpinfo() fonksiyonunu kullanabilirsiniz. Bu fonksiyonu çalıştırın ve sayfada mysqli bölümünü aratın. Eğer bu kısmı göremiyorsanız mysqli aktif değildir.

Mysqli kütüphanesi Mysql 4.1.3 ve yukarısı için tasarlanmıştır. Daha fazla esneklik ve güvenlik sunar. Ayrıca Mysql 4 sürümünde Mysql’e daha hızlı bağlanmanızı sağlayan bağlantı protokolü eklenmiştir. Mysqli bu protokolden yararlanmamızı sağlar ve tüm mysql 4.1+ işlevselliğini destekler. Php, Mysqli kütüphanesini hem prosedürel, hem de nesne yönelimli olarak kullanmamıza imkân tanır. Daha fazlası için şu linke bakabilirsiniz: http://www.php.net/manual/tr/mysqli.overview.php

Mysqli ile iki şekilde Mysql bağlantısı kurabiliriz:

// nesne yönelimli söz dizimi
$vt = new mysqli('localhost', 'root', '123456','veritabani');
// prosedürel söz dizimi
$vt = mysqli_connect('localhost', 'root', '123456','veritabani');

Yukarıdaki kodda sırasıyla mysql sunucumuzu, kullanıcı adımızı, şifre ve en son parametre olarak da kullanılacak veritabanını belirtiyoruz. Nesne yönelimli söz diziminde mysqli sınıfının bir örneği oluşturulur ve daha sonra sınıfa ait metotlar çağırılır. Prosedürel söz diziminde ise bir kaynak döner. Prosedürel olarak Mysqli kütüphanesini kullanacaksanız eğer fonksiyonlar genellikle Mysql için kullanmaya alışık olduğumuz fonksiyon isimlerine i harfi eklenmek suretiyle kullanılabilir (mysql_connect ve mysqli_connect gibi).

Unutmamanız gereken bir noktayı belirtmek isterim ki, eğer prosedürel söz dizimini kullanıyorsanız mysql bağlantınızı atadığınız değişkeni diğer temel mysqli fonksiyonlarına geçirmeniz gerekir. Aksi takdirde bir “Warning” mesajı alırsınız.

Veritabanı Seçmek

Veritabanını iki şekilde seçebiliriz. 1. Seçenek veritabanına bağlanırken isteğe bağlı 4. parametre ile bağlanılacak veritabanını seçeriz. Yukarıdaki örnekte bu yöntemi tercih ettik. 2.si ise bağlantı metodu ya da fonksiyonu ile.

// nesne yönelimli söz dizimi
$vt->select_db('veritabanı');
// prosedürel söz dizimi
mysqli_select_db($vt,'veritabanı');

Prosedürel söz diziminde kullandığımız mysqli_select_db() fonksiyonunun iki parametre aldığına ve birinci parametre olarak veritabanı bağlantı kaynağını geçirdiğimiz değişken olduğuna dikkat edin.

Sorgu Göndermek

Sorgu gönderme işlemi klasik Php ve Mysql kullanarak yaptığımız sorgulamanın neredeyse aynısıdır.

// nesne yönelimli söz dizimi
$sorgu = $vt->query('select sütun from tablo');
// prosedürel söz dimi
$sorgu = mysqli_query($vt, 'select sütun from tablo');

Sorgu Sonuçlarını Almak

Veritabanına gönderdiğimiz sorgunun sonucunu almak için mysqli_fetch_assoc ya da mysqli_fetch_row fonksiyonunu kullanabilirsiniz. Mysqli_fetch_assoc isimli anahtarları, mysqli_fetch_row ise numaralandırılmış anahtarları olan bir dizi döndürür.

// nesne yönelimli söz dizimi
$sonuc = $sorgu->fetch_assoc();
// prosedürel söz dizimi
$sonuc = mysqli_fetch_assoc($sorgu);

Satır Sayısını Elde Etmek

Sorgudan dönen satır sayısını elde etmek için mysqli_num_rows() fonksiyonundan yararlanılabilinir.

// nesne yönelimli söz dizimi
$sorgu ->num_rows;
//prosedürel söz dizimi
mysqli_num_rows($sorgu);

Örneklerin Birleştirilmesi

Nesne yönelimli söz dizimi:

// veritabanına bağlan
$vt = new mysqli('localhost', 'root', '12345678');
// hata varsa uyar ve çalışmayı durdur
if($vt->connect_errno) {
	echo 'Mysqli bağlantı hatası: ' . $vt->connect_errno;
	exit;
}
// deneme isimli veritabanını seç
$vt->select_db('deneme');
// üyeler tablosundan kullanıcı adını seç
$sorgu = $vt->query('select username from users');
// sonuçları ekrana yazdır
while($sonuc = $sorgu->fetch_assoc()) {
	echo $sonuc['username'].'<br />';
}
// satır sayısını ekrana yazdır
echo 'Sorgudan dönen satır sayısı: '.$sorgu->num_rows;

Prosedürel söz dizimi

// mysql'e bağlan
$vt = mysqli_connect('localhost', 'root', '12345678');
// hata varsa uyar ve çalışmayı durdur
if(!$vt) {
	echo 'Mysqli bağlantı hatası: ' . mysqli_connect_errno();
	exit;
}
// deneme isimli veritabanını seç
mysqli_select_db($vt,'deneme');
// üyeler tablosundan kullanıcı adını seç
$sorgu = mysqli_query($vt, 'select username from users');
// sonuçları ekrana yazdır
while($sonuc = mysqli_fetch_assoc($sorgu)) {
	echo $sonuc['username'].'<br />';
}
// satır sayısını ekrana yazdır
echo 'Sorgudan dönen satır sayısı: ' . mysqli_num_rows($sorgu);

Anlaşılabilmesi için örnekleri çok basit tuttum. Bu yazı mysqli kütüphanesi kullanımı için giriş niteliğindedir. İyi çalışmalar.

11 Yorum

Yorum Yapın
  • Gorkem Cevapla

    Tesekkur ederım.giris seviyesi için açıklayıcı olmuş

  • ferit Cevapla

    hocam süper bir anlatım olmuş teşekkürler vallaha çok yararlı oldu bana.

  • altayalp Cevapla

    Yorumlarınız için teşekkür ederim.

  • Nihat Cevapla

    hocam bu derslerinizin devamını bekleiyoruz. php mvc yapısı artık olmazsa olmaz bu yanında mysqli de ön plana çıkıyor. hocam sizden daha da makaleler bekliyoruz

    • altayalp Cevapla

      Uzun zamandır makale yazamıyorum fakat hem önerdiğiniz hem de farklı konularda makaleler yazmayı planlıyorum. İlginiz için teşekkürler.

  • Serkan Cevapla

    Prosedürel söz dizimi ile Nesne yönelimli söz dizimi arasındaki fark nedir? Hangisini kullanmamız daha yararlı olur.

    • altayalp Cevapla

      İkisi arasındaki fark kullanım şekilleridir. Ben tabii ki nesne yönelimli söz dizimini öneririm.

  • gultekin Cevapla

    Güzel sade bir anlatım olmuş, teşekkürler

  • adem çalhan Cevapla

    digitaloceanda linux Centos 6.5 64 bit üzerine vesta panel kurduk hocam mysql ile hazılanan sorgular çalısırken birtürlü mysqli ile hazırlananlar çalışmadı nerede “;” gördüysek kaldırmama rağmen hala bir gelişme yok çözüm önerinizi bekliyorum çok teşekkkürler hocam

    • altayalp Cevapla

      mysqli aktif olmayabilir. phpinfo() çıktısında mysqli kısmını görebiliyor olmanız gerekiyor.