PHP ile veritabanı işlemleri için çoğunlukla MySQL veritabanı kullanılır. Son yıllarda veritabanı bağlantı fonksiyon ve sınıfları çeşitlenmiştir. Burada MySQLi ile prosedürel bir şekilde veritabanı işlemleri gerçekleştirilecektir.
PHP’de MySQLi ile Veritabanına Bağlanma
Veritabanı bağlantısı kurulması için veritabanının bulunduğu sunucu, kullanıcı adı, şifre ve veritabanı bilgisine ihtiyaç duyulur. Veritabanı bağlantısı mysqli_connect() fonksiyonu ile sağlanır.
1 | $baglanti = mysqli_connect("host","kullanıcı adı","şifre","veritabanı adı"); |
MySQLi ile Karakter Kodlamasını Ayarlama
Karakterlerin web sayfasında düzgün bir şekilde görüntülenebilmesi için hem dosyanın karakter kodlaması, hem web sayfasının meta karakter kodlaması, veritabanı kullanılıyorsa veritabanı bağlantı kodlaması ve veritabanı tablosundaki alanın karakter kodlamasının uyumlu olması gereklidir. UTF8, sorunsuz bir şekilde kullanılan karakter kodlamasıdır. Karakter kodlaması, mysqli_set_charset() fonksiyonu ile ayarlanır.
1 | mysqli_set_charset($baglanti, "utf8"); |
MySQLi ile Sorgu Gönderme
MySQL veritabanı üzerinde bir sorgu çalıştırmak için mysqli_query() fonksiyonu kullanılır. Fonksiyona ilk parametre olarak bağlantı bilgilerini içeren $baglanti değişkeni, ikinci olarak da SQL komutu gönderilir. Aşağıdaki örnekte ogrenci isimli bir tablodan veri çekilmektedir.
1 2 3 4 | <?php $sorgu="SELECT * FROM ogrenci"; $gonder = mysqli_query($baglanti, $sorgu); ?> |
MySQLi ile Sonuçları Elde Etme
Veritabanından çok miktarda veri çekilecekse mysqli_fetch_array() fonksiyonu kullanılır. Bu fonksiyon, dizi tipinde değer döndürür ve MySQL tablosundaki her bir kayıt, ayrı bir dizi olarak getirilir. While döngüsü içinde kullanılarak döndürülen tüm satırların teker teker elde edilmesi sağlanır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <table> <?php $sorgu="SELECT * FROM ogrenci"; $gonder = mysqli_query($baglanti, $sorgu); while($satir = mysqli_fetch_array($gonder)) { ?> <tr> <td><?php echo $satir['ogrenci_no']; ?></td> <td><?php echo $satir['ad_soyad']; ?></td> <td><?php echo $satir['sinif']; ?></td> <td><?php echo $satir['hobi']; ?></td> </tr> <?php } ?> </table> |
Yukardaki örnekte ogrenci_no, ad_soyad, sinif ve hobi isimli tablo alanları $satir isimli dizi değişken ile elde edilir.
MySQLi ile Tek Bir Sonuç Gösterme
Eğer sorgumuz çok sayıda kayıt yerine tek bir değer getirecekse bu durumda mysqli_result() fonksiyonu kullanılır.
1 | mysqli_result($gonder, 0, "ad_soyad"); |
Yukarıdaki örnekte 0 ile belirtilen parametre ile kaçıncı kayıttaki verilerle ilgilenildiği ifade edilir. 0 (sıfır) ifadesi, ilk kaydı işaret eder. Ardından gelen ad_soyad parametresi ise bu tablonun sıfırıncı kaydının (diğer bir deyişle ilk eleman) ad_soyad alanındaki veriyi işaret eder. Dolayısıyla komut sonucunda ilk kaydın ad_soyad alanı elde edilir.
MySQLi ile Gelen Sonuç Sayısını Gösterme
En son sorgu ile gelen kayıt sayısının öğrenilmesi için mysqli_num_rows() fonksiyonu kullanılır. Bu fonksiyona parametre olarak, mysqli_query() fonksiyonundan gelen değer gönderilir.
1 | mysqli_num_rows($gonder); |
Eğer bu komutlar ile bir program yazılması gerekirse kaynak kodlar aşağıdaki gibi olacaktır:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | <?php $baglanti = mysqli_connect("localhost","root","","okul"); mysqli_set_charset($baglanti,"utf8"); if (!$baglanti) echo "BAĞLANILAMADI"; if (count($_POST)>0) { $sorgu="INSERT INTO ogrenci VALUES (null,'".$_POST['ad_soyad']."','".$_POST['sinif']."','".$_POST['hobi']."')"; $gonder = mysqli_query($baglanti, $sorgu); } ?> <!DOCTYPE html> <html lang="tr"> <head> </head> <body> <table border="1"> <thead> <tr> <th>NUMARA</th> <th>AD SOYAD</th> <th>SINIF</th> <th>HOBİ</th> </tr> </thead> <tbody> <?php $sorgu="SELECT * FROM ogrenci"; $gonder = mysqli_query($baglanti, $sorgu); while($satir = mysqli_fetch_array($gonder)) { ?> <tr> <td><?php echo $satir['ogrenci_no']; ?></td> <td><?php echo $satir['ad_soyad']; ?></td> <td><?php echo $satir['sinif']; ?></td> <td><?php echo $satir['hobi']; ?></td> </tr> <?php } ?> </tbody> <tfoot> <tr> <td colspan="4">Toplam Öğrenci Sayısı: <?php echo mysqli_num_rows($gonder); ?></td> </tr> </tfoot> </table> <hr> <form method="post"> <input type="text" name="ad_soyad" placeholder="Ad Soyad"> <br> <input type="text" name="sinif" placeholder="Sınıf"> <br> <input type="text" name="hobi" placeholder="Hobi"> <br> <input type="submit"> </form> </body> </html> |
MySQL’de Öğrenci Tablosu Oluşturma
Yukarıdaki örnekte bir öğrenci tablosu üzerinde işlemler gerçekleştirilmiştir. Öğrenci tablosunun oluşturulma komutları aşağıdaki gibidir:
1 2 3 4 5 6 7 | CREATE TABLE `ogrenci` ( `ogrenci_no` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `ad_soyad` varchar(20) NOT NULL, `sinif` varchar(5) NOT NULL, `hobi` varchar(200) NOT NULL, PRIMARY KEY (`ogrenci_no`) ) |
Ya kaç tane yerde aradım bulamadım. Kaç gündür uğraşıyorum sonunda çözdüm, eline sağlık.
Rica ederim, iyi çalışmalar…
Süpersin hocam,
Ben httpdocs altında mysqli de gösterdiğiniz gibi sistem/baglan.php hazırladım baglan.php de $baglan bilgileri var.
İndex.php dosyamda httpdocs
altında site/index.php.
Bu index.php dosyama veritabanı bilgilerini nasıl include edeceğim?
Httpdocs/site/pages/rightsides.php de de mysql den çağırmam gereken son yorumlar gibi bilgiler var. Bunun içinde de baglan.php yi include etmem gerekiyor mu?
Yol gösteren bir yazı rica edebilir miyim?
Yazı için vakit bulamam ancak buradan yardımcı olmaya çalışayım.
index.php içerisinde veritabanı işlemlerini kullanmak için include(“../sistem/baglan.php”) şeklinde dosyayı dahil edebilirsiniz. Ancak en güzel yöntem, her bir sayfada bunları teker teker çağırmaktansa bir adet header.php gibi bir dosya yaparak ayar, veritabanı gibi her bir çağrıyı buradan yapın. Böylece daha kolay bakım yapabilirsiniz sayfanıza.
rightsides.php için de, herhangi_bir_sayfa.php için de herader.php’yi dahil etmeniz yeterli olacaktır. header.php de diğer çağrıları gerçekleştirecektir.
Cevabınız için teşekkürler hocam, dediğinizi uygulamaya çalışacağım.
Merhaba Hocam acaba php ile sql sorgusu yaparken where şartı kullanılamıyor mu?? bununla ilgili örnek hiçbir yerde bulamadım. Yardımcı olabilir misiniz??
MySQL kurallarının geçerli olduğu ve WHERE şartının kullanılabildiği her yerde kullanabilirsiniz.