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
tablosundaname
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 gelenname
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çinAND
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.