PHP 8 ile MySQL veritabanına bağlantı kurmak için en yaygın kullanılan iki yöntem şunlardır: PDO (PHP Data Objects) ve MySQLi (MySQL Improved). Aşağıda her iki yöntemi de anlatacağım.
1. PDO ile MySQL Bağlantısı
PDO, PHP’de farklı veritabanı türlerini destekleyen bir arayüzdür. Hem MySQL hem de diğer veritabanlarına bağlanmak için kullanılabilir. PDO ayrıca daha güvenli parametreli sorgular ile SQL enjeksiyon riskini azaltır.
PDO Kullanarak MySQL Bağlantısı:
<?php
$host = 'localhost';
$db = 'veritabani_adi';
$user = 'root';
$pass = 'sifre';
$charset = 'utf8mb4';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset"; // DSN (Data Source Name)
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Hataları göster
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Sonuçları dizi olarak döndür
PDO::ATTR_EMULATE_PREPARES => false, // Gerçek hazırlıklı ifadeleri kullan
];
try {
$pdo = new PDO($dsn, $user, $pass, $options); // PDO nesnesini başlat
echo "Veritabanına başarıyla bağlanıldı!";
} catch (PDOException $e) {
// Bağlantı hatasını yakala ve göster
throw new PDOException($e->getMessage(), (int)$e->getCode());
}
?>
Açıklama:
-
$dsn: Bağlantı bilgilerini içeren DSN (Data Source Name) dizgesidir. Burada MySQL sunucusunun adresi (
host
), veritabanı adı (dbname
) ve karakter seti (charset
) tanımlanır. - $options: PDO bağlantısının davranışını kontrol eden ayarlardır. Hata ayıklama ve sorgu sonuçlarını nasıl alacağımız gibi ayarları belirleriz.
- try-catch bloğu: Veritabanı bağlantısında hata olursa, bu hatayı yakalayıp ekrana basarız.
PDO ile Sorgu Çalıştırma:
<?php
// Basit bir veri sorgusu
$sql = "SELECT * FROM users";
$stmt = $pdo->query($sql); // Sorguyu çalıştır
while ($row = $stmt->fetch()) {
echo $row['name'] . "<br>"; // Kullanıcı isimlerini göster
}
?>
2. MySQLi ile MySQL Bağlantısı
MySQLi sadece MySQL veritabanı ile çalışır ve hem nesne yönelimli hem de prosedürel (fonksiyonel) şekilde kullanılabilir.
MySQLi Nesne Yönelimli Kullanımı:
<?php
$servername = "localhost";
$username = "root";
$password = "sifre";
$database = "veritabani_adi";
// Bağlantı oluştur
$conn = new mysqli($servername, $username, $password, $database);
// Bağlantı kontrolü
if ($conn->connect_error) {
die("Bağlantı başarısız: " . $conn->connect_error);
}
echo "Veritabanına başarıyla bağlanıldı!";
?>
MySQLi ile Sorgu Çalıştırma:
<?php
$sql = "SELECT * FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// Sonuçları satır satır al
while($row = $result->fetch_assoc()) {
echo "Kullanıcı: " . $row["name"] . "<br>";
}
} else {
echo "Sonuç yok";
}
$conn->close(); // Bağlantıyı kapat
?>
3. Bağlantı Güvenliği
- Hazırlıklı ifadeler kullanarak (Prepared Statements) SQL enjeksiyondan korunabilirsiniz. Hazırlıklı ifadeler hem PDO hem de MySQLi ile kullanılabilir.
PDO Hazırlıklı İfade Örneği:
<?php
$sql = "SELECT * FROM users WHERE email = :email";
$stmt = $pdo->prepare($sql);
$stmt->execute(['email' => $email]); // :email yer tutucuya veri bağla
$users = $stmt->fetchAll();
?>
MySQLi Hazırlıklı İfade Örneği:
<?php
$stmt = $conn->prepare("SELECT * FROM users WHERE email = ?");
$stmt->bind_param("s", $email); // "s" string türünü belirtir
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo $row['name'];
}
?>
Sonuç
PHP 8 ile hem PDO hem de MySQLi kullanarak MySQL veritabanına güvenli bir şekilde bağlanabilir ve sorgular çalıştırabilirsiniz. PDO çok yönlü olup farklı veritabanlarını da desteklerken, MySQLi sadece MySQL için optimize edilmiştir. Projenize en uygun yöntemi seçerek güvenli ve etkili veritabanı işlemleri gerçekleştirebilirsiniz.