Mysql Bağlantısında Basitce Neden PDO Kullanmalıyız?
- Eski mysql_connect falan tarih oldu, hem güvensiz hem yavaş. PDO ise:
- Farklı veritabanlarına (MySQL, PostgreSQL, SQLite vs.) aynı kodla bağlanmanı sağlar.
- SQL injection saldırılarına karşı prepared statements ile kalkan gibi korur.
- Hataları güzelce exception olarak fırlatır, debug yapmak çocuk oyuncağı olur.
- 2025'te PHP 8.3+ ile uçuyor, utf8mb4 desteği tam, emoji bile sorunsuz sakla! 😎
Adım Adım Bağlantı Kuralım
Önce bir db_baglanti.php dosyası oluşturalım aşağıdaki kodları içine yapıştıralım,sonra tüm projende include etmeliyiz.
<?php
// Veritabanı ayarlarını buraya yaz (gerçek projede .env dosyası veya config ile gizle!)
$host = 'localhost'; // Genelde localhost, uzak sunucuda IP veya domain
$dbname = 'teknokure_db'; // Senin veritabanı adı
$kullanici = 'root'; // MySQL kullanıcı adı
$sifre = ''; // Şifre (üretimde boş bırakma!)
$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4"; // DSN: Data Source Name – sihir burada!
$secenekler = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Hata olursa exception fırlatsın
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Verileri assoc array olarak getir
PDO::ATTR_EMULATE_PREPARES => false, // Gerçek prepared statements kullansın (güvenlik için şart!)
PDO::MYSQL_ATTR_SSL_CA => null, // Eğer SSL varsa buraya sertifika yolu ekle (opsiyonel)
];
try {
$pdo = new PDO($dsn, $kullanici, $sifre, $secenekler);
// Bağlantı başarılı! Artık $pdo'yu her yerde kullanabilirsin.
// echo "Bağlantı kuruldu, hadi kod yazalım! 🚀"; // Test için açabilirsin
} catch (PDOException $e) {
// Hata olursa gizli tut, logla (üretimde ekrana yazma!)
error_log("Veritabanı bağlantı hatası: " . $e->getMessage());
die("Bir şeyler ters gitti, lütfen site yöneticisine haber ver! 😅");
}
?>
Neden Bu Kod Özgün ve İyi?
- utf8mb4 charset: Emoji, Türkçe karakterler sorunsuz (eski tutorial'larda utf8 yazar, o eksik kalır).
- EMULATE_PREPARES => false: Gerçek server-side prepare yapar, injection'a karşı demir gibi.
- Exception modu: Hata gizli kalmaz, geliştirirken hayat kurtarır.
- Seçenekler array'i: Temiz, okunaklı – klasik setAttribute zincirinden daha modern.
Şimdi Basit Bir Test Yapalım.
test.php dosyamı oluşturup içine aşağıdaki kodlarımızı yapıştıralım.
<?php
require 'db_baglanti.php'; // Bağlantıyı dahil et
try {
$sorgu = $pdo->query("SELECT DATABASE() AS mevcut_db"); // Şu anki DB'yi sor
$s
echo "Bağlandığın veritabanı: " . $sonuc['mevcut_db'] . " 🎉";
} catch (PDOException $e) {
echo "Test hatası: " . $e->getMessage();
}
?>
Bağlantımız başarılı ise bir sonraki adıma geçelim. Mysql Tablomuzu oluşturalım.Database adı teknokure_db siz bunu değişebilirsiniz.
CREATE DATABASE IF NOT EXISTS teknokure_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE teknokure_db;
CREATE TABLE kullanicilar (
id INT AUTO_INCREMENT PRIMARY KEY,
adsoyad VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE NOT NULL,
yas INT CHECK (yas >= 13), -- 13 yaş altı giremesin 😏
kayit_tarihi DATETIME DEFAULT CURRENT_TIMESTAMP,
aktif TINYINT(1) DEFAULT 1,
seviye ENUM('yeni', 'orta', 'pro') DEFAULT 'yeni',
bio TEXT NULL, -- Kendini anlatmak için
INDEX idx_email (email) -- Hızlı arama için index
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Tablomuz şuan boş içerisini dolduralım.
INSERT INTO kullanicilar (adsoyad, email, yas, seviye, bio) VALUES
('Ulvi xxx', 'ulvi@teknokure.com', 25, 'pro', 'TeknoKüre\'nün kurucusu. PHP ve Python aşığı! 🚀'),
('Ayşe xxx', 'ayse@example.com', 22, 'orta', 'Web geliştirme öğreniyorum, PDO sayesinde korkum geçti 😄'),
('Mehmet xxx', 'mehmet@example.com', 30, 'pro', 'Backend developer, güvenlik manyağı 🔒'),
('Zeynep xxx', 'zeynep@example.com', 19, 'yeni', 'Yeni başladım, bu site sayesinde hızlandım!'),
('Ali xxxx', 'ali@example.com', 28, 'orta', 'Her gün kod yazıyorum, emoji severim: 🎮⚽');
Şimdi kullanicilar.php dosyamızı oluşturup aşağıdaki kodları içine yapıştıralım. PDO ile bağlantı sağlayıp veritabanından kullanıcıları listeleyeceğiz.
<?php
require 'db_baglanti.php'; // PDO bağlantı dosyan
try {
$sorgu = $pdo->query("SELECT * FROM kullanicilar WHERE aktif = 1 ORDER BY kayit_tarihi DESC");
echo "<h2>TeknoKüre Topluluk Üyeleri 🚀</h2>";
echo "<table border='1' cellpadding='10' cellspacing='0' style='border-collapse: collapse;'>";
echo "<tr style='background:#f0f0f0;'>
<th>ID</th><th>Ad Soyad</th><th>Email</th><th>Yaş</th><th>Seviye</th><th>Kayıt Tarihi</th><th>Bio</th>
</tr>";
while ($satir = $sorgu->fetch()) {
echo "<tr>";
echo "<td>{$satir['id']}</td>";
echo "<td>{$satir['adsoyad']}</td>";
echo "<td>{$satir['email']}</td>";
echo "<td>{$satir['yas']}</td>";
echo "<td><strong>{$satir['seviye']}</strong></td>";
echo "<td>{$satir['kayit_tarihi']}</td>";
echo "<td>{$satir['bio']}</td>";
echo "</tr>";
}
echo "</table>";
echo "<p><em>Toplam üye: " . $sorgu->rowCount() . " kişi. Sen de aramıza katıl! 😎</em></p>";
} catch (PDOException $e) {
echo "Veri çekme hatası: " . $e->getMessage();
}
?>
Veritabanımız da ki sadece Aktif olan Kullanıcıları listeledik.
Aşağıdaki Kodda ise Veritabanımız'a veri eklerken otomatik aktif 1 olarak değil 0 olarak ekleyebiliyoruz.Yani üye Varsayılan değerle değil bizim belirlediğimiz değerle veritabanına kayıt olmuş oluyor.
INSERT INTO kullanicilar (adsoyad, email, yas, seviye, bio, aktif)
VALUES ('Pasif Olacak Üye', 'pasif@example.com', 18, 'yeni', 'Şimdilik beklemede', 0);
Yorumlar
Yorum Yazma Kuralları
Yorumlarınız kendi sorumluluğunuzdadır. Yazacağınız Yorumlar ile birlikte IP adresinizde Kayıt Edilir.
Yorumlarda Lütfen Hakaret Küfür Kullanmayınız.
Yorum Yazın
Bu makaleye henüz yorum yapılmamış. İlk yorumu siz yapın!