PHP MySQL Sorgulama
PHP ile MySQL komutlarını çalıştırmak için kullanılan mysqli sınıfına ait query ve prepare metotları ile ilgili bilgiler yer almaktadır.
query
MySQLi OOP sınıfındaki query metodu parametre olarak aldığı SQL komutlarını çalıştırmak için kullanılır.
<?php
$baglanti = new mysqli("localhost", "root", "", "kisi");
if ($baglanti->connect_errno > 0) {
die("<b>Bağlantı Hatası:</b> " . $baglanti->connect_error);
}
$baglanti->set_charset("utf8");
$sorgu = $baglanti->query("SELECT * FROM kisiler");
if ($baglanti->errno > 0) {
die("<b>Sorgu Hatası:</b> " . $baglanti->error);
}
echo "<p>Toplam kayıt sayısı: " . $sorgu->num_rows . "</p>";
print_r($sorgu->fetch_all());
$sorgu->close();
$baglanti->close();
?>
Metot sorgu durumuna göre mysqli sınıfına ait errno ve error özelliklerine çeşitli değer atar.
Bu değerleri kontrol ederek sorgunun durumu kontrol edilir.
Sorgu değer döndürüyorsa (veri çekme varsa) metot geri dönüş değeri olarak mysqli_result sınıfındaki metot ve özellikleri (num_rows, fetch_all, fetch_array, fetch_object vb.) verir.
<?php
$baglanti = new mysqli("localhost", "root", "", "kisi");
if ($baglanti->connect_errno > 0) {
die("<b>Bağlantı Hatası:</b> " . $baglanti->connect_error);
}
$baglanti->set_charset("utf8");
$sorgu = $baglanti->query("INSERT INTO kisiler(kisi_adi, kisi_soyadi, kisi_eposta) VALUES('Yusuf Sefa', 'SEZER', '[email protected]')");
if ($baglanti->errno > 0) {
die("<b>Sorgu Hatası:</b> " . $baglanti->error);
}
echo "<p>Eklenen kayıt sayısı: " . $baglanti->affected_rows . "</p>";
echo "<p>Eklenen kayıt ID: " . $baglanti->insert_id . "</p>";
$baglanti->close();
?>
SQL sorgusu ekleme, güncelleme, silme vb. bir işlem ise mysqli sınıfına ait çeşitli özellikler kullanılır.
SQL sorgusu dışarıdan bir değer alıyorsa query metodu SQL Injection gibi istenmeyen durumlara neden olabilir.
Dışarıdan değer alan SQL sorguları için prepare (ön hazırlıklı sorgu) metodunun kullanılması faydalı olacaktır.
prepare
MySQLi OOP sınıfındaki prepare metodu parametre olarak aldığı SQL komutlarını güvenli olarak çalıştırmak için hazır hale getirir.
<?php
$baglanti = new mysqli("localhost", "root", "", "kisi");
if ($baglanti->connect_errno > 0) {
die("<b>Bağlantı Hatası:</b> " . $baglanti->connect_error);
}
$baglanti->set_charset("utf8");
$sorgu = $baglanti->prepare("SELECT * FROM kisiler");
if ($baglanti->errno > 0) {
die("<b>Sorgu Hatası:</b> " . $baglanti->error);
}
$sorgu->execute();
$sonuc = $sorgu->get_result();
echo "<p>Toplam kayıt sayısı: " . $sonuc->num_rows . "</p>";
print_r($sonuc->fetch_all());
$sorgu->close();
$baglanti->close();
?>
Metot parametre olarak aldığı SQL komutunu işlemek üzere mysqli_stmt sınıfını oluşturur.
Döndürülen mysqli_stmt sınıfı içerisinde yer alan execute metodu ile SQL komutları çalıştırılır.
SQL komut sonuçlarını almak için mysqli_stmt sınıfı içerisinde yer alan get_results metodu kullanılır ve mysqli_result sınıfındaki metot ve özellikleri (num_rows, fetch_all, fetch_array, fetch_object vb.) verir.
Ön hazırlıklı sorgular çoğunlukla dışarıdan (formdan, değişkenlerden vb.) alınan verilerin uygun olarak SQL komutuna eklenmesi için kullanılır.
<?php
$baglanti = new mysqli("localhost", "root", "", "kisi");
if ($baglanti->connect_errno > 0) {
die("<b>Bağlantı Hatası:</b> " . $baglanti->connect_error);
}
$baglanti->set_charset("utf8");
$sorgu = $baglanti->prepare("INSERT INTO kisiler(kisi_adi, kisi_soyadi, kisi_eposta) VALUES(?, ?, ?)");
$sorgu->bind_param('sss', $adi, $soyadi, $eposta);
$adi = "Yusuf Sefa";
$soyadi = "SEZER";
$eposta = "[email protected]";
$sorgu->execute();
if ($baglanti->errno > 0) {
die("<b>Sorgu Hatası:</b> " . $baglanti->error);
}
echo "<p>Eklenen kayıt sayısı: " . $baglanti->affected_rows . "</p>";
echo "<p>Eklenen kayıt ID: " . $baglanti->insert_id . "</p>";
$sorgu->close();
$baglanti->close();
?>
Metot içerisindeki özel karakterlere (?) bind_param metodu ile SQL Injection gibi saldırılardan arındırılmış veriler eklenir.
Verileri eklemek için kullanılan bind_param metodunun ilk parametresi eklenecek verilerin tipini belirtir.
Parametredeki değerler;
s – metinsel veri
i – sayısal veri
d – ondalıklı sayısal veri
b – BLOB veri
anlamanı taşır.
Dışarıdan veri alarak (form verileri) SQL komutu oluşturulacaksa prepare (ön hazırlıklı sorgu) metodunun kullanılması faydalı olacaktır.
PHP MySQL Derslerine buradan ulaşabilirsiniz…
Hayırlı günler dilerim.