Php 8 MySQLi ile Kayıt Filtreleme

Php 8 MySQLi ile Kayıt Filtreleme

PHP 8 ile MySQLi kullanarak veritabanındaki kayıtları filtrelemek, SQL sorguları ile yapılan temel işlemlerden biridir. Kayıtları filtrelemek, veritabanında arama yapmak, belirli kriterlere göre verileri çekmek için kullanılır. Bu işlem genellikle SQL SELECT komutu ile gerçekleştirilir. Aşağıda MySQLi ile kayıt filtreleme işlemlerinin nasıl yapılacağını adım adım anlatacağım.

1. MySQLi ile Veritabanına Bağlantı

Öncelikle, veritabanına bağlantı kurmamız gerekiyor. Bağlantı kurduktan sonra filtreleme işlemlerini gerçekleştirebiliriz.

<?php // Veritabanı bilgileri $servername = "localhost"; $username = "root"; $password = ""; $database = "testdb"; // Veritabanına bağlan $conn = mysqli_connect($servername, $username, $password, $database); // Bağlantı kontrolü if (!$conn) { die("Bağlantı başarısız: " . mysqli_connect_error()); } ?>

2. Basit Kayıt Filtreleme

Örneğin, students tablosunda ismi "Ali" olan öğrencileri listelemek istiyorsunuz. Bu işlem için SQL SELECT komutunu kullanırız.

<?php // SQL sorgusu ile filtreleme $sql = "SELECT * FROM students WHERE name = 'Ali'"; // Sorguyu çalıştır ve sonuçları al $result = mysqli_query($conn, $sql); // Kayıtları kontrol et if (mysqli_num_rows($result) > 0) { // Her satırı ekrana yaz while($row = mysqli_fetch_assoc($result)) { echo "ID: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>"; } } else { echo "Sonuç yok."; } // Bağlantıyı kapat mysqli_close($conn); ?>

Bu kodda:

  • SQL SELECT * FROM students WHERE name = 'Ali' : students tablosunda name alanı "Ali" olan tüm kayıtları filtreler.
  • mysqli_fetch_assoc() : Her kaydı bir dizi olarak döndürür ve bu diziyi ekrana yazdırır.
  • mysqli_num_rows() : Dönen kayıt sayısını kontrol eder. Eğer sonuç varsa, veriler döngü ile ekrana yazılır.

3. Dinamik Filtreleme (Kullanıcı Girdisi ile)

Bir formdan gelen kullanıcı girdisine göre filtreleme yapabiliriz. Bu durumda kullanıcı tarafından sağlanan bilgiyi güvenli bir şekilde SQL sorgusunda kullanmak için prepared statements (hazırlıklı sorgular) kullanmak güvenlidir.

Kullanıcı girdisine göre dinamik bir sorgu oluşturma örneği:

<?php // Kullanıcı girdisini al (örneğin bir formdan) $search_name = $_GET['name']; // Hazırlıklı sorgu oluştur $stmt = mysqli_prepare($conn, "SELECT * FROM students WHERE name = ?"); // Parametreyi bağla (s: string) mysqli_stmt_bind_param($stmt, "s", $search_name); // Sorguyu çalıştır mysqli_stmt_execute($stmt); // Sonuçları al $result = mysqli_stmt_get_result($stmt); // Sonuçları ekrana yaz if (mysqli_num_rows($result) > 0) { while ($row = mysqli_fetch_assoc($result)) { echo "ID: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>"; } } else { echo "Sonuç yok."; } // Sorguyu ve bağlantıyı kapat mysqli_stmt_close($stmt); mysqli_close($conn); ?>

Bu kodda:

  • Kullanıcı Girdisi ($_GET['name']): URL’den gelen name parametresi ile kullanıcıdan bir isim alınır.
  • Hazırlıklı Sorgu (mysqli_prepare()): Kullanıcı girdisini doğrudan SQL sorgusuna eklemeyip, güvenlik için ? kullanarak bir hazırlıklı sorgu oluştururuz.
  • Parametre Bağlama (mysqli_stmt_bind_param()): Kullanıcının girdiği ismi güvenli bir şekilde SQL sorgusuna ekleriz.
  • SQL Injection'dan Korunma: Hazırlıklı sorgular, kötü niyetli kullanıcıların SQL injection saldırılarına karşı veritabanını korur.

4. Birden Fazla Şarta Göre Filtreleme

Birden fazla şarta göre filtreleme yapmak için SQL'deki AND, OR gibi ifadeler kullanılır.

Örneğin, hem ismi "Ali" hem de e-posta adresi "ali@example.com" olan öğrencileri listelemek için:

<?php // SQL sorgusu ile birden fazla şartlı filtreleme $sql = "SELECT * FROM students WHERE name = 'Ali' AND email = 'ali@example.com'"; // Sorguyu çalıştır ve sonuçları al $result = mysqli_query($conn, $sql); // Sonuçları ekrana yaz if (mysqli_num_rows($result) > 0) { while($row = mysqli_fetch_assoc($result)) { echo "ID: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>"; } } else { echo "Sonuç yok."; } // Bağlantıyı kapat mysqli_close($conn); ?>

Bu sorgu:

  • name = 'Ali' AND email = 'ali@example.com' koşuluna uyan tüm kayıtları döndürür. İki koşulun da sağlanması gerektiği için AND kullanılır.

5. Veri Güvenliği: SQL Injection'dan Korunma

Kullanıcı tarafından sağlanan veriyi doğrudan SQL sorgusuna eklemek, SQL Injection gibi saldırılara yol açabilir. Bu nedenle her zaman hazırlıklı sorgular veya filtreleme işlemlerinde güvenli yöntemler kullanılmalıdır.

Örneğin, kullanıcı girdisini filtrelemek için hazırlıklı sorgular kullandığımız bir örnek yukarıda gösterildi. Prepared statements kullanarak kullanıcı girdisi güvenli hale getirilir ve veritabanı koruma altına alınır.

6. Özet

  • PHP 8 ile MySQLi kullanarak veritabanındaki kayıtları filtrelemek için SQL SELECT komutu ve koşullar (WHERE, AND, OR) kullanılır.
  • Hazırlıklı sorgular (prepared statements), güvenlik ve performans açısından daha iyi bir yöntemdir.
  • Kullanıcı girdisine dayalı sorgularda, SQL injection gibi saldırılardan korunmak için her zaman hazırlıklı sorgular kullanılmalıdır.
  • Birden fazla şarta göre kayıtları filtrelemek için AND, OR gibi SQL operatörleri kullanılır.

Bu şekilde PHP 8'de MySQLi ile kayıt filtreleme işlemlerini güvenli ve etkili bir şekilde gerçekleştirebilirsiniz.



Yorum Ekle

Üzerine gel