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', 'yusufsezer@mail.com')");

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 = "yusufsezer@mail.com";
$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.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!