Sql & Veritabanı İle Uygulamalar İçin Veri Kayıt Sorgulama Arayüzü Nasıl Yapılır?

Sql & Veritabanı İle Uygulamalar İçin Veri Kayıt Sorgulama Arayüzü Nasıl Yapılır?
Sql & Veritabanı İle Uygulamalar İçin Veri Kayıt Sorgulama Arayüzü Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Bir veri sorgulama arayüzü geliştirmek için temel olarak bir web sunucusu (Apache veya Nginx), PHP 8.3+ sürümü ve bir veritabanı yönetim sistemi (MySQL veya MariaDB) gereklidir. Geliştirme ortamınızda veritabanı bağlantılarını yönetmek için PDO kütüphanesini kullanacağız. PDO, farklı veritabanı sistemlerine bağlanabilmemizi sağlayan ve SQL Injection saldırılarına karşı hazırlıklı olan modern bir katmandır.

  • PHP 8.3 veya üzeri bir sürüm.
  • MySQL 8.0+ veritabanı sunucusu.
  • Veritabanı işlemleri için PDO eklentisinin aktif olması.
  • Güvenli bir kod editörü (VS Code önerilir).

Veritabanı Tasarımı ve Bağlantı Kurulumu

Uygulamanızın kalbi olan veritabanı bağlantısını, güvenli bir şekilde yapılandırmanız gerekir. Bağlantı bilgilerini kodun içine gömmek yerine, çevresel değişkenler veya güvenli bir yapılandırma dosyası kullanmak en iyi pratiktir. Aşağıdaki örnekte, PDO kullanarak veritabanına nasıl güvenli bir şekilde bağlanacağınızı görebilirsiniz.

Bu kod bloğu, veritabanı bağlantısını hatasız bir şekilde kurmanızı sağlar. PDO::ERRMODE_EXCEPTION kullanımı, bir hata durumunda uygulamanın durmasını ve hatanın yakalanmasını sağlar, bu da hata ayıklama sürecini kolaylaştırır.

Veri Kayıt Arayüzü İçin Form Oluşturma

Kullanıcıların sisteme veri girişi yapabilmesi için HTML formları kullanılır. Formunuzda POST metodunu kullanmak, verilerin URL üzerinden değil, HTTP gövdesinde taşınmasını sağlar. Bu, güvenlik açısından ilk adımdır.



    
    
    Kaydet

Burada required özniteliği, tarayıcı tarafında basit bir doğrulama sağlar. Ancak unutmayın, gerçek güvenlik sunucu tarafında başlar.

Kritik Uyarı: Asla kullanıcıdan gelen veriyi doğrudan SQL sorgusuna dahil etmeyin. Her zaman "Prepared Statements" (Hazırlanmış İfadeler) kullanın. Aksi takdirde uygulamanız SQL Injection saldırılarına açık hale gelir.

Veritabanına Güvenli Veri Ekleme

Formdan gelen veriyi veritabanına yazarken, verinin tipini ve formatını doğrulamak gerekir. Aşağıdaki örnekte, kullanıcıdan alınan verinin nasıl güvenli bir şekilde kaydedileceğini görebilirsiniz.

Burada kullanılan ? işaretleri, veritabanı sürücüsünün veriyi güvenli bir şekilde temizlemesini sağlar. Bu yöntem, kötü niyetli kodların (SQL Injection) çalıştırılmasını engeller.

Veri Sorgulama ve Listeleme Arayüzü

Verileri ekrana getirmek için SELECT sorgusunu kullanırız. Kullanıcının arama yapabilmesi için bir filtreleme mekanizması eklemek, arayüzü profesyonel bir seviyeye taşır.

htmlspecialchars() fonksiyonu, veritabanından gelen verinin içinde HTML kodu varsa (XSS saldırısı için), bunları düz metne dönüştürerek tarayıcının çalıştırmasını engeller.

Veri Yönetim Yöntemlerinin Karşılaştırılması

Yöntem Güvenlik Performans Kullanım Zorluğu
PDO (Hazırlanmış İfadeler) Çok Yüksek Yüksek Orta
MySQLi (Hazırlanmış İfadeler) Yüksek Yüksek Orta
Doğrudan Sorgu (String) Güvensiz Düşük Kolay

Sıkça Sorulan Sorular

SQL Injection nedir ve nasıl korunurum?

SQL Injection, saldırganın veritabanı sorgularına kötü niyetli SQL kodları enjekte etmesidir. Bunu engellemenin tek yolu, kullanıcı verilerini asla sorgu dizesine doğrudan eklememek ve her zaman PDO gibi hazırlanmış ifadeler kullanmaktır.

Neden PDO kullanmalıyım?

PDO, veritabanı bağımsız bir yapı sunar. Yani yarın MySQL'den PostgreSQL'e geçmek isterseniz, kodunuzun büyük bir kısmını değiştirmek zorunda kalmazsınız. Ayrıca hata yönetimi konusunda çok daha gelişmiştir.

XSS saldırısı veritabanı arayüzünde nasıl oluşur?

Kullanıcı veritabanına bir isim yerine alert('hack') gibi bir değer girerse ve siz bunu ekrana yazdırırken filtrelemezseniz, bu kod diğer kullanıcıların tarayıcısında çalışır. htmlspecialchars() kullanımı bu riski tamamen ortadan kaldırır.

Veritabanı bağlantısı neden try-catch içinde olmalı?

Veritabanı sunucusu geçici olarak kapalı olabilir veya kimlik bilgileri yanlış olabilir. Try-catch bloğu, bu hataların kullanıcıya açık bir şekilde (şifreleri sızdırarak) değil, kontrollü bir şekilde gösterilmesini sağlar.

Veri kayıt arayüzünde sayfalama (pagination) gerekli mi?

Evet, veritabanında binlerce kayıt olduğunda tüm veriyi tek sayfada listelemek hem sunucuyu hem de tarayıcıyı yorar. LIMIT ve OFFSET kullanarak verileri parçalar halinde çekmek, performans için şarttır.

Sorumluluk Reddi: Bu rehberde paylaşılan kod örnekleri eğitim amaçlıdır. Üretim ortamına (production) almadan önce tüm form girişlerini sunucu tarafında doğrulamalı (validation) ve veritabanı bağlantı bilgilerini güvenli bir şekilde saklamalısınız.

Veritabanı İşlemlerinde Performans Optimizasyonu ve İndeksleme

Uygulamanız büyüdükçe, veritabanı tablolarındaki kayıt sayısı arttıkça sorgu sürelerinizde gözle görülür yavaşlamalar yaşanabilir. Veri kayıt ve sorgulama arayüzünüzün hızlı çalışması, kullanıcı deneyimi (UX) açısından kritik öneme sahiptir. Performansı artırmak için en etkili yöntemlerden biri doğru indeksleme stratejileridir.

İndeksleme Stratejileri

İndeksler, veritabanının tüm tabloyu taramak yerine, aranan veriyi bir "içindekiler tablosu" gibi hızlıca bulmasını sağlar. Örneğin, kullanıcıların e-posta adresleri üzerinden arama yaptığı bir sistemde, email sütununa indeks eklemek sorgu hızını milisaniyelere indirir.

-- İndeks oluşturma örneği
CREATE INDEX idx_kullanici_email ON kullanicilar(email);

-- Birden fazla sütun için bileşik indeks
CREATE INDEX idx_ad_soyad ON kullanicilar(soyad, ad);

Dikkat edilmesi gerekenler:

  • Aşırı İndekslemeden Kaçının: Her indeks, veri ekleme (INSERT) ve güncelleme (UPDATE) işlemlerini yavaşlatır. Sadece sık sorgulanan sütunlara indeks ekleyin.
  • SELECT * Kullanımını Sınırlandırın: Sadece ihtiyacınız olan sütunları çekmek, veritabanı yükünü azaltır.
  • EXPLAIN Kullanımı: Sorgularınızın nasıl çalıştığını analiz etmek için EXPLAIN komutunu kullanın.
-- Sorgu performansını analiz etmek
EXPLAIN SELECT id, ad, soyad FROM kullanicilar WHERE email = 'test@example.com';

Repository Pattern ile Modüler Veritabanı Yönetimi

Kodunuzun bakımını kolaylaştırmak ve veritabanı işlemlerini iş mantığından (business logic) ayırmak için Repository Pattern kullanmak profesyonel bir yaklaşımdır. Bu yapı, veritabanı sorgularınızı tek bir sınıfta toplamanıza olanak tanır.

Örnek Repository Yapısı

Aşağıdaki örnekte, kullanıcı işlemlerini yöneten temel bir repository sınıfı yapısını görebilirsiniz. Bu yapı sayesinde veritabanı teknolojisini ileride değiştirmeniz gerekirse, sadece bu sınıfı güncellemeniz yeterli olacaktır.

class UserRepository {
    private $db;

    public function __construct($pdo) {
        $this->db = $pdo;
    }

    public function findByEmail($email) {
        $stmt = $this->db->prepare("SELECT * FROM kullanicilar WHERE email = :email");
        $stmt->execute(['email' => $email]);
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }

    public function create(array $data) {
        $stmt = $this->db->prepare("INSERT INTO kullanicilar (ad, email) VALUES (:ad, :email)");
        return $stmt->execute([
            'ad' => $data['ad'],
            'email' => $data['email']
        ]);
    }
}

// Kullanımı:
$userRepo = new UserRepository($pdo);
$user = $userRepo->findByEmail('ornek@domain.com');
İpucu: Repository Pattern kullanmak, birim testleri (unit testing) yazarken veritabanı bağlantısı yerine "mock" nesneler kullanmanıza imkan tanır. Bu da test süreçlerinizi hızlandırır ve daha güvenilir hale getirir.

Sonuç

SQL & Veritabanı ile uygulamalar için veri kayıt sorgulama arayüzü oluşturmak, disiplinli bir çalışma gerektirir. Güvenli bağlantı kurma, kullanıcı girişlerini temizleme ve verileri doğru şekilde listeleme becerileri, sizi profesyonel bir yazılımcı yapan temel taşlardır. Bu rehberdeki adımları takip ederek, 2026 standartlarında, güvenli ve ölçeklenebilir bir arayüz geliştirebilirsiniz.

Bir sonraki adım olarak, veritabanı tablolarınızda indeksleme (indexing) yaparak sorgu hızınızı nasıl artıracağınızı ve veritabanı işlemlerini bir "Repository Pattern" yapısı ile nasıl daha modüler hale getireceğinizi araştırmanızı öneririm.

Bu yazıya tepkinizi paylaşın:
Mert Çelik

Teknoloji dünyasını ve dijital araçları günlük hayata entegre etme konusunda içerikler üretiyorum. Karmaşık teknik rehberleri en yalın haliyle sunmayı hedefliyorum.

Yorumlar (0)

Yorum Yaz