CRUD
(Create, Read, Update, Delete) işlemleri, web uygulamalarında en yaygın kullanılan veri işlemlerini temsil eder. CRUD işlemleri arasında yer alan Update
(Veri Güncelleme), veritabanında mevcut bir kaydın güncellenmesi anlamına gelir. Bu makalede, PHP ve PDO
(PHP Data Objects) kullanarak MySQL veritabanında veri güncelleme işleminin nasıl yapılacağını ele alacağız.CRUD Nedir?
- Create: Yeni bir veri ekleme.
- Read: Veritabanından veri okuma.
- Update: Mevcut veriyi güncelleme.
- Delete: Veritabanındaki veriyi silme.
Bu makalenin odak noktası,
Update
işleminin PDO kullanılarak PHP ile nasıl yapılacağını öğrenmek olacaktır.Adım Adım PHP ile Veri Güncelleme (Update)
1. Veritabanı Bağlantısı Kurma
İlk olarak, PHP ile MySQL veritabanına bağlantı kurmamız gerekir. PDO, güvenli ve esnek bir veritabanı bağlantısı sağlar.
<?php
$dsn = 'mysql:host=localhost;dbname=blog';
$username = 'root';
$password = '';
try {
$dbh = new PDO($dsn, $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Bağlantı hatası: ' . $e->getMessage();
}
?>
Yukarıdaki kod, localhost üzerinde çalışan blog adlı veritabanına bağlanmak için kullanılır. Hata durumunda, PDO istisna fırlatarak hatayı gösterir.
2. Form İle Veri Güncelleme
Veritabanındaki bir kaydı güncellemek için genellikle bir HTML formu kullanılır. Aşağıda örnek bir form verilmiştir. Bu form ile kullanıcı, veritabanındaki bir makalenin başlığı ve içeriğini güncelleyebilir.
<form action="update.php" method="POST">
<input type="hidden" name="id" value="1"> <!-- Güncellenecek kaydın ID'si -->
<div>
<label for="baslik">Başlık:</label>
<input type="text" name="baslik" id="baslik" value="Eski Başlık">
</div>
<div>
<label for="icerik">İçerik:</label>
<textarea name="icerik" id="icerik">Eski İçerik</textarea>
</div>
<button type="submit">Güncelle</button>
</form>
POST
yöntemi ile update.php
dosyasına veri gönderir. Bu veriler, güncelleme işlemi için kullanılacaktır.
3. PHP ile Update İşlemi
Formdan gelen verileri aldıktan sonra, bunları veritabanında güncellemek için
UPDATE
SQL sorgusunu kullanacağız. Aşağıdaki örnekte, makaleler
tablosunda bir makale güncelleniyor.<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Formdan gelen verileri alalım
$id = $_POST['id'];
$baslik = $_POST['baslik'];
$icerik = $_POST['icerik'];
// Güncelleme sorgusu için SQL komutunu hazırlayalım
$sql = 'UPDATE makaleler SET baslik = :baslik, icerik = :icerik WHERE id = :id';
$stmt = $dbh->prepare($sql);
// Parametreleri bağlayalım
$stmt->bindParam(':baslik', $baslik);
$stmt->bindParam(':icerik', $icerik);
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
// Sorguyu çalıştıralım
if ($stmt->execute()) {
echo "Makale başarıyla güncellendi.";
} else {
echo "Güncelleme işlemi başarısız.";
}
}
?>
Açıklama:
- SQL Sorgusu:
- UPDATE
komutu ile makaleler
tablosundaki veriyi güncelliyoruz. SET
ile hangi sütunların güncelleneceğini belirtiyoruz.prepare()
: PDO'da sorguları güvenli bir şekilde hazırlamak için kullanılır. Bu yöntem, SQL enjeksiyon saldırılarına karşı koruma sağlar.
- Parametre Bağlama: bindParam()
yöntemi ile kullanıcıdan gelen değerleri güvenli bir şekilde SQL sorgusuna bağlarız. Bu sayede doğrudan kullanıcı girdileri ile SQL sorgusu çalıştırılmamış olur.
-
execute()
: Hazırlanan sorguyu çalıştırmak için kullanılır. Güncelleme başarılı ise bir mesaj gösterilir.4. Hata Yönetimi
PDO kullanırken, sorgunun başarılı olup olmadığını kontrol etmek ve herhangi bir hata oluştuğunda uygun bir şekilde yönetmek önemlidir. PDO'nun sunduğu hata yönetimi fonksiyonları sayesinde bu işlemi gerçekleştirebiliriz.
try {
$stmt->execute();
echo "Veri başarıyla güncellendi!";
} catch (PDOException $e) {
echo "Hata: " . $e->getMessage();
}
5. Veri Doğrulama ve Güvenlik
Güncelleme işlemleri sırasında kullanıcıdan gelen veriler doğrulanmalı ve güvenlik önlemleri alınmalıdır. Bunun için bazı temel adımlar şunlardır: - SQL Enjeksiyonu Önleme: PDO kullanarak `prepare()` ve `bindParam()` yöntemleri ile SQL enjeksiyonu önlenebilir.- Veri Doğrulama: Kullanıcıdan gelen verilerin geçerli olup olmadığını kontrol etmek için doğrulama yapılmalıdır. Örneğin, boş bir başlık güncellenmemelidir.
if (empty($baslik) || empty($icerik)) {
echo "Başlık ve içerik boş olamaz.";
exit;
}
-
htmlspecialchars()
Kullanımı: XSS saldırılarına karşı verileri ekrana yazdırmadan önce işlemek gerekir. Veritabanından çekilen ve kullanıcılara gösterilecek veriler için bu fonksiyon kullanılmalıdır.echo htmlspecialchars($baslik);
Tamamlanmış Örnek: Veritabanında Güncelleme İşlemi
Aşağıda, form ile gönderilen verileri güncelleyip bir başarı ya da hata mesajı döndüren tam bir PHP kodu bulunuyor.
<?php
// Veritabanı bağlantısı
$dsn = 'mysql:host=localhost;dbname=blog';
$username = 'root';
$password = '';
try {
$dbh = new PDO($dsn, $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Bağlantı hatası: ' . $e->getMessage();
}
// Güncelleme işlemi
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$id = $_POST['id'];
$baslik = $_POST['baslik'];
$icerik = $_POST['icerik'];
// Boş verileri kontrol et
if (empty($baslik) || empty($icerik)) {
echo "Başlık ve içerik boş olamaz.";
} else {
// SQL sorgusu
$sql = 'UPDATE makaleler SET baslik = :baslik, icerik = :icerik WHERE id = :id';
$stmt = $dbh->prepare($sql);
// Parametreleri bağla
$stmt->bindParam(':baslik', $baslik);
$stmt->bindParam(':icerik', $icerik);
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
// Sorguyu çalıştır
if ($stmt->execute()) {
echo "Makale başarıyla güncellendi.";
} else {
echo "Güncelleme işlemi başarısız.";
}
}
}
?>
Sonuç
Update
işlemi, veritabanındaki mevcut verilerin güncellenmesini sağlar ve PHP ile PDO kullanarak bu işlemi güvenli ve esnek bir şekilde gerçekleştirebilirsiniz. Kullanıcıdan gelen verileri güvenli bir şekilde işlemek, veri doğrulaması yapmak ve SQL enjeksiyonuna karşı önlemler almak oldukça önemlidir.