Hoş Geldin, Mühendis!

Tüm mühendislerin ve mühendis adaylarının yer aldığı forum sayfamıza kayıt olmalısınız. Kayıt olduktan sonra tüm ders notlarına, teknik dokümanlara erişim sağlayabilecek, sorularınızı sorup cevaplar verebileceksiniz. Sitemiz tamamiyle ücretsiz olmakla birlikte Mühendis Puanı sistemi uygulamaktadır.

Bilgi paylaştıkça çoğalır.

Premium Abonelik 📢

Premium abonelik ile sitemizi reklamsız gezebilir, dosyaları sınırsızca indirebilirsiniz.

Daha Fazlası

[Muhendisiz.NET] Tekrar Sizlerleyiz! 🎭

Mühendisiz.NET sitesi forum ve blog sayfası olarak tekrar yayın hayatına başladı. 🤩 Sizlerde forum sayfamıza üye olabilir ve mühendis topluluğumuza katılabilirsiniz.

Daha Fazlası

Mühendis Puanı Sistemi🏆

Bilgi paylaştıkça çoğalır felsefesini benimsemiş olmamız nedeniyle Mühendis Puanı sistemini uygulamaya aldık. Dökümanları indirebilmek için bazı paylaşımlarda bulunmalısınız. 📨

Daha Fazlası
  • Dosya indirebilmek için 2 Mühendis Puanına ihtiyacınız var. Konuya yorum atarak 1 MP Not paylaşarak 6 MP kazanırsınız.
    Bilgi Paylaştıkça Çoğalır. (Mühendislik Puanı (MP) Nedir?)
  • Mühendis Puanı kazanmaya vakti olmayanlar için ücretli premium üyelik sistemi aktif edilmiştir.
    (Premium Üyelik SATIN AL)

PHP MySQL Sorgulama

turkmedia

Moderatör
Katılım
8 Ara 2022
Mesajlar
760
Mühendis Puanı
1,612
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.
 

Son kaynaklar