23 Temmuz 2019 Salı

PHP ile EzSQL Kullanımı

Merhaba Webkolog takipçileri!

Bugün sizlere PHP projelerinizde veritabanı işlemlerini daha basit ve hızlı bir şekilde yapmanızı sağlayacak küçük ama etkili bir kütüphaneden bahsedeceğim: ezSQL. Özellikle küçük ve orta ölçekli projelerde, karmaşık ORM yapılarına girmeden pratik çözümler arayanlar için ezSQL harika bir alternatiftir.

ezSQL Nedir ve Neden Kullanmalıyız?

ezSQL, PHP için geliştirilmiş, kullanımı kolay bir veritabanı soyutlama sınıfıdır. Temel amacı, veritabanı sorgularını yazmayı ve sonuçları işlemeyi basitleştirmektir. MySQL'in yanı sıra PostgreSQL, SQLite gibi farklı veritabanı sistemlerini de destekleyebilir (ilgili adaptör dosyalarıyla). Başlıca avantajları şunlardır:

  • Basit API: Öğrenmesi ve kullanması oldukça kolaydır. Veritabanı işlemlerini birkaç metodla halledebilirsiniz.
  • Hızlı Geliştirme: Karmaşık yapılandırmalara gerek kalmadan hızla prototip geliştirmenize veya küçük uygulamalarınızı ayağa kaldırmanıza olanak tanır.
  • Temel Güvenlik Önlemleri: SQL enjeksiyonlarına karşı temel korumalar sunar (escape() metodu ile).
  • Önbellekleme Desteği: Sorgu sonuçlarını önbelleğe alarak performansı artırma yeteneği vardır.

Ancak unutmayın, ezSQL, PDO veya MySQLi gibi modern uzantıların sunduğu "prepared statements" kadar güçlü bir SQL enjeksiyon koruması sağlamaz. Bu yüzden kullanıcıdan gelen verileri sorgulara eklemeden önce mutlaka $db->escape() metodunu kullanmalısınız!


ezSQL Kurulumu

ezSQL'i projenize dahil etmek oldukça basittir:

  1. Öncelikle ezSQL GitHub deposundan kütüphaneyi indirin.
  2. İndirdiğiniz zip dosyasından shared klasörü içinde bulunan ez_sql_core.php ve mysql klasörünün içinde bulunan ez_sql_mysql.php dosyalarını PHP çalışma dizininize (tercihen projenizin bir kütüphaneler klasörüne) kopyalayın. Ben genellikle aynı dizinde tutmayı tercih ediyorum ama projenizin yapısına göre değiştirebilirsiniz.

İşte bu kadar! Kurulum işlemleri bu kadar basit.


Veritabanı Bağlantısı

ezSQL ile veritabanı bağlantısı kurmak için kütüphane dosyalarını dahil etmeniz ve ezSQL sınıfının bir örneğini oluşturmanız yeterli:


<?php
// ezSQL çekirdek ve MySQL adaptör dosyalarını dahil et
include_once "ez_sql_core.php";
include_once "ez_sql_mysql.php";

// Veritabanı bağlantı bilgileri
$db_username = "root";
$db_password = "12345678"; // Kendi şifrenizi girin
$db_name = "deneme";       // Kendi veritabanı adınızı girin
$db_host = "localhost";

// ezSQL sınıfı ile veritabanı bağlantısı kur
$db = new ezSQL_mysql($db_username, $db_password, $db_name, $db_host); // PHP 7+ için ezSQL_mysql kullanın

// Bağlantının başarılı olup olmadığını kontrol et
if (!$db->query("SELECT NOW()")) {
    exit('Hata: Veritabanına bağlanılamadı! Lütfen bağlantı bilgilerini kontrol edin.');
} else {
    echo "Veritabanı bağlantısı başarıyla kuruldu!<br>";
}

// Karakter setini ayarlama (Türkçe karakterler için önemlidir)
$db->query("SET NAMES utf8");
$db->query("SET CHARACTER SET utf8");
$db->query("SET COLLATION_CONNECTION = utf8_general_ci");

// Başka bir veritabanı seçmek isterseniz:
// $db->select("yeni_veritabani_adi");

// ... Kalan kodlarınız ...

// Veritabanı bağlantısını kapatmanıza gerek yok, PHP script'i bitince otomatik kapanır.
?>

Önemli Not: ezSQL'in eski sürümleri new ezSQL() şeklinde kullanılabilirken, PHP 7 ve sonrası için genellikle new ezSQL_mysql() (veya kullandığınız veritabanına göre ezSQL_mysqli vb.) kullanmanız gerekir. Aksi takdirde hata alabilirsiniz.


Sorgu Çalıştırma ve Sonuçları Alma

ezSQL, farklı tipte sorgular için çeşitli metodlar sunar:

query() Metodu (INSERT, UPDATE, DELETE için)

Veri ekleme, güncelleme veya silme gibi işlemler için query() metodunu kullanabilirsiniz:


<?php
// ... Bağlantı kodu burada ...

// Veri ekleme
if ($db->query("INSERT INTO insanlar (isim) VALUES ('Ali')")) {
    echo "Ali kaydı başarıyla eklendi.<br>";
} else {
    echo "Veri eklerken hata oluştu: " . $db->last_error . "<br>";
}

// Veri güncelleme
if ($db->query("UPDATE insanlar SET isim = 'Veli' WHERE id = 1")) {
    echo "ID 1 olan kayıt güncellendi. Etkilenen satır sayısı: " . $db->rows_affected . "<br>";
} else {
    echo "Veri güncellerken hata oluştu: " . $db->last_error . "<br>";
}

// Veri silme
$silinecek_id = 2;
// SQL enjeksiyonuna karşı dikkat! Kullanıcıdan gelen veriyi mutlaka escape edin:
$silinecek_id = $db->escape($silinecek_id); 
if ($db->query("DELETE FROM insanlar WHERE id = {$silinecek_id}")) {
    echo "ID 2 olan kayıt silindi. Etkilenen satır sayısı: " . $db->rows_affected . "<br>";
} else {
    echo "Veri silerken hata oluştu: " . $db->last_error . "<br>";
}

// Son eklenen kaydın ID'si
echo "Son eklenen kaydın ID'si: " . $db->insert_id . "<br>";
?>
get_row() Metodu (Tek Satırlık Veri Çekme)

Tek bir veritabanı satırını nesne olarak almak için kullanışlıdır:


<?php
// ... Bağlantı kodu burada ...

$id_cekilecek = 3;
$rs = $db->get_row("SELECT id, isim FROM insanlar WHERE id = {$id_cekilecek}");

if ($rs) {
    echo "ID: " . $rs->id . ", İsim: " . $rs->isim . "<br>";
} else {
    echo "Kayıt bulunamadı.<br>";
}
?>
get_var() Metodu (Tek Satır ve Tek Sütun Veri Çekme)

Özellikle COUNT(), SUM() gibi tek bir değer döndüren sorgular için idealdir:


<?php
// ... Bağlantı kodu burada ...

$toplam_insan = $db->get_var("SELECT COUNT(id) FROM insanlar");
echo "Toplam insan sayısı: " . $toplam_insan . "<br>";
?>
get_results() Metodu (Çok Satırlı Sonuçlar)

Birden fazla satır içeren sonuç kümelerini almak için kullanılır. Sonuçları nesnelerden oluşan bir dizi olarak döndürür:


<?php
// ... Bağlantı kodu burada ...

$sonuclar = $db->get_results("SELECT id, isim FROM insanlar ORDER BY id DESC");

if ($sonuclar) {
    echo "Tüm İnsanlar:<br>";
    foreach($sonuclar as $rs) {
        echo "- ID: " . $rs->id . ", İsim: " . $rs->isim . "<br>";
    }
    echo "Toplam bulunan kayıt: " . $db->num_rows . "<br>"; // Kaç kayıt döndürüldüğünü verir
} else {
    echo "Veritabanında insan kaydı bulunamadı.<br>";
}
?>
get_col() Metodu (Çok Satırlı Tek Sütun Veri Çekme)

Tek bir sütundaki tüm değerleri bir dizi olarak almak için kullanışlıdır:


<?php
// ... Bağlantı kodu burada ...

$isimler = $db->get_col("SELECT isim FROM insanlar");

if ($isimler) {
    echo "Tüm İsimler:<br>";
    foreach($isimler as $isim) {
        echo "- " . $isim . "<br>";
    }
} else {
    echo "Hiç isim bulunamadı.<br>";
}
?>

Hata Raporlama ve Hata Ayıklama

ezSQL, hata ayıklama ve hata raporlama için bazı basit araçlar sunar:


<?php
// ... Bağlantı kodu burada ...

// Hata göstermeyi kapat
$db->hide_errors();

// Bilerek hatalı bir sorgu çalıştıralım
$db->query("SELECT * FROM olmayan_tablo");

// Son hatayı kontrol et
if ($db->last_error) {
    echo "Son Hata: " . $db->last_error . "<br>";
    // Hatayı detaylı görmek için
    $db->vardump($db->last_error); 
}

// Hata göstermeyi aç
$db->show_errors();

// Debug çıktısı almak için (genellikle geliştirme aşamasında kullanılır)
$sonuc = $db->get_results("SELECT id, isim FROM insanlar");
$db->debug(); // Sorgu ve sonuçlar hakkında hızlı bilgi verir

// Daha detaylı bir çıktı için
$db->vardump($sonuc);
?>

Önbellekleme (Cache)

ezSQL, sorgu sonuçlarını önbelleğe alarak tekrar eden sorgularda performansı artırma yeteneğine sahiptir:


<?php
// ... Bağlantı kodu burada ...

// Önbellek dizinini ayarla (yazma izni olduğundan emin olun)
$db->cache_dir = 'ezsql_cache'; 

// Sorgu önbelleğini diske kaydetmeyi aktif et
$db->use_disk_cache = true; 

// Sorgu önbelleğinin geçerlilik süresi (saat cinsinden)
$db->cache_timeout = 24; 

// Sorguları önbelleğe almayı aktif et
$db->cache_queries = true; 

// Şimdi çalıştıracağınız sorgular önbelleğe alınacak
$sonuclar = $db->get_results("SELECT id, isim FROM insanlar", ARRAY_A); // get_results'ın ikinci parametresi cache'i etkileyebilir.

echo "Veriler önbellekten veya veritabanından çekildi.<br>";

// İlk çalıştırmada sorgu veritabanından alınır ve önbelleğe yazılır.
// İkinci çalıştırmada (cache süresi dolmadıysa) direkt önbellekten okunur.
?>

Önbellekleme özelliğini kullanmadan önce, ezsql_cache adında bir dizin oluşturmanız ve web sunucusunun bu dizine yazma iznine sahip olduğundan emin olmanız gerektiğini unutmayın.

ezSQL, özellikle öğrenmesi kolay, hızlı bir veritabanı etkileşimi isteyen geliştiriciler için harika bir araçtır. Basit projelerinizde veya prototip geliştirirken size zaman kazandırabilir. Ancak büyük ve kritik projelerde, güvenlik ve performans için PDO veya MySQLi'nin "prepared statements" gibi daha gelişmiş özelliklerini kullanmayı düşünebilirsiniz.

Umarım bu makale, ezSQL'i projelerinizde kullanmaya başlamanız için size iyi bir başlangıç noktası sunmuştur!

Webkolog'u takipte kalın!

Hepinize bol kodlu ve keyifli öğrenme süreçleri dilerim!

0 yorum:

Yorum Gönder