- Katılım
- 7 Nis 2025
- Konular
- 367
- Mesajlar
- 780
- Çözümler
- 1
- Tepkime puanı
- 121
- Puan
- 93
- Konum
- İstanbul
- Web sitesi
- forumagel.com
Hazır Kod Bankası - Konu 7: PHP ile Veritabanı (MySQL) Bağlantısı ve Temel İşlemler
Hazır Kod Bankası Serimizin Yedinci Konusu: PHP ve Veritabanları Birleşiyor!
Merhaba arkadaşlar! Serimizin ilk altı konusunda HTML, CSS, VBA, VB.NET, PHP ve Veritabanı temellerini gördük. PHP ile sunucu tarafında kod yazabileceğimizi ve veritabanlarında veri saklayabileceğimizi artık biliyoruz. Şimdi sıra geldi bu iki gücü birleştirmeye: PHP ile bir veritabanına bağlanarak veri ekleme ve okuma işlemleri!
Modern dinamik web sitelerinin ve uygulamalarının büyük çoğunluğu, kullanıcı bilgilerini, içerikleri, siparişleri vb. saklamak için bir veritabanı kullanır ve bu veritabanıyla PHP gibi sunucu taraflı bir dil aracılığıyla etkileşime girer. Bu etkileşim; kullanıcı kaydı, giriş yapma, içerik yayınlama, ürün listeleme gibi pek çok işlemin temelini oluşturur.
Bu konuda, PHP kullanarak popüler bir veritabanı sistemi olan MySQL'e nasıl bağlanacağımızı, veritabanına nasıl veri ekleyeceğimizi (INSERT) ve veritabanından nasıl veri okuyup web sayfasında göstereceğimizi (SELECT) öğreneceğiz.
Önemli Ön Gereksinim: Bu konudaki örnekleri çalıştırabilmek için yerel sunucu ortamınızda (XAMPP, WAMP, MAMP vb.) MySQL veritabanı sunucusunun çalışıyor olması ve bir veritabanı ile örnek bir tablo oluşturmuş olmanız gerekmektedir. Genellikle bu paketlerle birlikte gelen phpMyAdmin gibi araçlar tablo oluşturmak için size yardımcı olacaktır.
Örneklerimiz için basit bir `kullanicilar` tablosu oluşturduğunuzu varsayalım. Tablonun yapısı şöyle olabilir (SQL komutu ile örneği aşağıda):
[SQL]
CREATE TABLE kullanicilar (
id INT AUTO_INCREMENT PRIMARY KEY,
ad VARCHAR(50) NOT NULL,
eposta VARCHAR(100) NOT NULL UNIQUE,
kayit_tarihi TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
[/SQL]
Açıklama: Basit bir kullanıcı tablosu. `id` benzersiz anahtar, `ad` ve `eposta` metin alanları, `kayit_tarihi` ise otomatik dolan bir zaman damgasıdır.
1. Veritabanı Bağlantısı (MySQLi ile)
PHP'de MySQL veritabanına bağlanmak için en yaygın kullanılan yöntemlerden biri MySQLi (MySQL Improved) uzantısıdır. (Bir diğer modern ve esnek yöntem PDO'dur, ancak başlangıç için MySQLi daha basittir).
Bağlantı kurmak için sunucu adı, kullanıcı adı, şifre ve veritabanı adı gibi bilgilere ihtiyacınız olacak. Yerel test ortamlarında genellikle sunucu adı 'localhost', kullanıcı adı 'root', şifre ise boştur (veya kurulumda belirlediğinizdir).
İşte bağlantı kodu:
PHP:
<?php
$servername = "localhost"; // Sunucu adı
$username = "root"; // Veritabanı kullanıcı adı
$password = ""; // Veritabanı şifresi (yerel test için boş olabilir)
$dbname = "test_db"; // Kullanacağınız veritabanının adı (siz kendi oluşturduğunuzu yazın)
// Veritabanı bağlantısını oluşturma
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Bağlantıyı kontrol etme
if (!$conn) {
die("Bağlantı Başarısız: " . mysqli_connect_error());
}
echo "Veritabanı Bağlantısı Başarılı";
// Bağlantıyı kapatma (genellikle sayfa sonunda yapılır)
// mysqli_close($conn);
?>
2. Veritabanına Veri Ekleme (INSERT)
Veritabanına yeni bir kayıt eklemek için SQL'in `INSERT INTO` komutunu kullanırız. PHP'de bu SQL komutunu bir metin değişkenine atar ve `mysqli_query()` fonksiyonu ile çalıştırırız.
PHP:
<?php
// ... (Önceki bağlantı kodları buraya gelecek) ...
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Bağlantı Başarısız: " . mysqli_connect_error());
}
// Eklenecek veri
$eklenecek_ad = "Ayşe";
$eklenecek_eposta = "[email protected]";
// SQL komutu
$sql = "INSERT INTO kullanicilar (ad, eposta) VALUES ('$eklenecek_ad', '$eklenecek_eposta')";
// SQL komutunu çalıştırma
if (mysqli_query($conn, $sql)) {
echo "Yeni kayıt başarıyla eklendi";
} else {
echo "Hata: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>
3. Veritabanından Veri Okuma (SELECT)
Veritabanından bilgi almak için SQL'in `SELECT` komutunu kullanırız. PHP'de yine `mysqli_query()` fonksiyonunu kullanırız ancak `SELECT` sorguları bir sonuç kümesi (result set) döndürür. Bu kümeden verileri alıp işlememiz gerekir.
PHP:
<?php
// ... (Önceki bağlantı kodları buraya gelecek) ...
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Bağlantı Başarısız: " . mysqli_connect_error());
}
// SQL komutu (Tüm kullanıcıları seç)
$sql = "SELECT id, ad, eposta, kayit_tarihi FROM kullanicilar";
$result = mysqli_query($conn, $sql);
// Sonuç kontrolü ve veriyi ekrana yazdırma
if (mysqli_num_rows($result) > 0) {
// Her satırı döngü ile al ve ekrana yazdır
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Ad: " . $row["ad"]. " - Eposta: " . $row["eposta"]. " - Kayıt Tarihi: " . $row["kayit_tarihi"]. "<br>";
}
} else {
echo "Veritabanında hiç kullanıcı bulunamadı.";
}
mysqli_close($conn);
?>
4. Tam Bir Örnek: Veri Ekleme Formu ve Listeleme (Tek Sayfada)
Şimdi hem veri eklemek için basit bir form hem de mevcut verileri listeleyen bir yapı kuralım. Bu örneği tek bir `.php` dosyası içinde yapacağız.
PHP:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PHP ve MySQL Örneği</title>
<style>
table, th, td { border: 1px solid black; border-collapse: collapse; padding: 8px; }
th { background-color: #f2f2f2; }
</style>
</head>
<body>
<h1>Kullanıcı Yönetimi (Basit Örnek)</h1>
[B]<?php[/B]
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db"; // Kendi veritabanı adınız
// Veritabanı bağlantısını oluştur
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Bağlantıyı kontrol et
if (!$conn) {
die("Bağlantı Başarısız: " . mysqli_connect_error());
}
// **** Veri Ekleme İşlemi ****
// Form POST metodu ile gönderildiyse işlemi yap
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Formdan gelen verileri al
$yeni_ad = $_POST['form_ad'];
$yeni_eposta = $_POST['form_eposta'];
// SQL komutu (Veri ekleme)
// Güvenlik Notu: Bu yöntem SQL Injection'a açıktır, gerçek projede Prepared Statements kullanılmalıdır!
$insert_sql = "INSERT INTO kullanicilar (ad, eposta) VALUES ('$yeni_ad', '$yeni_eposta')";
if (mysqli_query($conn, $insert_sql)) {
echo "<p style='color:green;'>Yeni kullanıcı başarıyla eklendi.</p>";
} else {
echo "<p style='color:red;'>Kullanıcı eklenirken hata oluştu: " . mysqli_error($conn) . "</p>";
}
}
[B]?>[/B]
[SIZE=4][B]Yeni Kullanıcı Ekle[/B][/SIZE]
<form action="" method="POST"> Ad: <input type="text" name="form_ad" required><br><br>
E-posta: <input type="email" name="form_eposta" required><br><br>
<input type="submit" value="Kaydet">
</form>
<hr>
[SIZE=4][B]Kullanıcı Listesi[/B][/SIZE]
[B]<?php[/B]
// **** Veri Okuma (Listeleme) İşlemi ****
$select_sql = "SELECT id, ad, eposta, kayit_tarihi FROM kullanicilar";
$result = mysqli_query($conn, $select_sql);
if (mysqli_num_rows($result) > 0) {
// Verileri tablo formatında göster
echo "<table>";
echo "<tr><th>ID</th><th>Ad</th><th>E-posta</th><th>Kayıt Tarihi</th></tr>";
while($row = mysqli_fetch_assoc($result)) {
echo "<tr>";
echo "<td>" . $row["id"] . "</td>";
echo "<td>" . $row["ad"] . "</td>";
echo "<td>" . $row["eposta"] . "</td>";
echo "<td>" . $row["kayit_tarihi"] . "</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "Veritabanında kayıtlı kullanıcı bulunamadı.";
}
// Veritabanı bağlantısını kapat
mysqli_close($conn);
[B]?>[/B]
</body>
</html>
Sıra Sizde!
Yerel sunucunuzda MySQL çalışıyor mu? phpMyAdmin gibi bir araçla `test_db` (veya kendi belirlediğiniz isimde) veritabanını ve `kullanicilar` tablosunu oluşturdunuz mu? Bağlantı kodunu kendi bilgilerinizle güncelleyip çalıştırabildiniz mi? Yukarıdaki tam örneği çalıştırıp veri eklemeyi ve listelemeyi denediniz mi?
PHP-MySQL bağlantısı, INSERT/SELECT sorguları veya hata mesajları hakkında aklınıza takılan her türlü soruyu bu konu altında sorabilirsiniz. Bu temel bilgilerle veri güncelleme (UPDATE) ve silme (DELETE) işlemlerini de SQL bilginizi kullanarak kendiniz denemeye çalışabilirsiniz!
Serinin Geleceği?
PHP ile veritabanı etkileşiminin temellerini görerek web uygulaması geliştirmenin çok önemli bir katmanına giriş yapmış olduk. Serinin bu noktadan sonra nasıl devam etmesini istersiniz?
- PHP & MySQL'de daha ileri konular (JOIN sorguları, Prepared Statements, kullanıcı giriş/kayıt sistemi vb.)?
- Yeni bir dil/teknoloji (JavaScript, Python, Node.js vb.)?
- Mobil geliştirme temelleri (Android/iOS)?
- Veya başka önerileriniz mi var?
Bu konuya kadar olan tüm katılımlarınız için teşekkür ederim. Umarım bu serinin ilk 7 konusu sizlere faydalı olmuştur.
Görüşmek üzere!
Bu konu, "Hazır Kod Bankası" serisinin yedinci parçasıdır ve "Yazılım Bilgi ve Yeni Başlayanlar İçin" kategorisi altında paylaşılmıştır.