PDO Kullanımı

Bu yazımda sizlere PDO nedir ve PDO nasıl kullanılır insert,update,delete,select işlemleri nasıl yapılır bunlardan bahsedeceğim. PDO açılımı PHP Data Objects türkçe karşılıgı PHP Veri Objeleri eskiden projelerimizde MYSQL kullanırdık artık PHP MYSQL desteğini çekti çünkü PDO daha avantajlı daha güvenilir ve en önemlisi ise OOP mantığında ve bir çok veritabanı sürücüsü destekiyor.

PDO kullanmamızın avantajları

  • SQL Injection Açıkları
  • XSS Açıkları

PDO SQL Injection,Xss gibi açıkları otomatik örtbas ediyor ve bize büyük kolaylık sağlıyor MYSQL kullanırken bir form işleminde kullanıcıdan input dan veri alırken post’u html taglarından temizlemek gerekirdi ayrı ayrı filtreleme yapmak gerekirdi örnegin htmlspecialchars,trim gibi artık bunları yapmamıza gerek yok PDO bizim yerimize sql cümleciğinin içerisine gelen degişkeni koymak yerine ‘?’ koyarak verilerimizin korunmasını sağlıyoruz detaylı kullanımı aşağıda görebilirsiniz.

PDO Veritabanı Bağlantısı

try {
$conn = new PDO(“mysql:host=localhost;dbname=users;charset=utf8”, “root”, “password”);
} catch ( PDOException $e ){
print $e->getMessage();
}

Try Catch yapısını kullanarak PDO ile veritabanına bağlandık ve Dilimizi UTF-8 olarak ayarladık siz isterseniz try catch yapısını kullanmayabilirsiniz ben örneği bu şekilde gösterdim.

PDO INSERT Kullanımı

$query = $conn->prepare(“INSERT INTO user SET
user_name= ?,
user_password = ?,
user_mail = ?”);
$insert = $query->execute(array(
“İskender Uzuner”,55555, “[email protected]
));
if ( $insert ){
print “veri ekleme işlemi başarılı!”;
}

Verilerimizi prepare içerisinde gelen degişkenleri yazmak yerine ? koyarak execute içerisine verilerimiz yazıyoruz bu sayede güvenlik açıklarından korunuyoruz

PDO DELETE Kullanımı

$query= $conn->prepare(“DELETE FROM user WHERE user_name = :user_name”);
$delete = $query->execute(array(
‘user_name’ => $_GET[‘user_name’]
));

Tek bir veriyi PDO ile silmiş olduk burada dikkat ettiyseniz sql cümleciğinin içerisinde ? yerine :user_name kullandık bu sizin tercihiniz ikiside aynı işi görüyor.

PDO UPDATE Kullanımı

$query= “UPDATE tablo SET user_name=?,user_password=? WHERE id=?”;
$query = $conn->prepare($query);
$sonuc = $query->execute(array($user_name,$user_password,$id));

PDO ile user tablosundaki user_name,user_password alanlarını id’sine göre güncelleme işlemi yaptık.

PDO SELECT Kullanımı

$query = $conn->query(“SELECT * FROM user where id=1″, PDO::FETCH_ASSOC);
foreach( $query as $row ){
echo $row[‘user_name’].”
“;
}

Yukarıdaki sorgu kesinlikle kullanımını tavsiye etmem çünkü bu şekilde yazılan kod xss,sql injection açıkları yaratır çünkü koşul belirttik ve koşulun degerini direk 1 yaptık hacker abilerimiz bu sorguya rahatlıkla erişebilir o yüzden gelin biz aşağıdaki koda bakalım.

$query = “SELECT * FROM user WHERE id= :id”;
$query = $conn->prepare($query);
$query->bindParam(‘:id’, $id, PDO::PARAM_INT);
$sonuc = $query->execute();

Burada görmüş olduğumuz gibi id degerini direk 1 yazmak yerine :id yazdık bu sayede verimize erişim engellenmiş oldu ayrına PARAM_INT diyerek gelen verimizin bir INT değer olduğunu söyledik.

bindParam() ve bindValue() Nedir ?

bindParam sadece veri ismi sonra verinin degişken ismi şekilde yazılmalıdır.

bindParam(“:title”, $title)

bindValue ise hem degişkenin verisi hemde degişken ismini yazdırmaktadır.

bindValue(“:title”, $title) veya bindValue(“:title”, “title verisi”)

6 Comments

  1. Emeğine sağlık hocam, aşağıdaki örnekteki gibi değişken girmek istiyorum fakat tanımsız değişken uyarısı alıyorum bi pratiği varmı? teşekkürler.
    $insert = $query->execute(array(
    "$blabla",$blabla, "$blabla"
    ));

  2. birşey soracam, insert kullanırken niye execute’u değişkene atadık da direk kullanmadık, niye bazen pdoda insanlar bunu değişkene atarken bazıları atamıyor?
    Ayrıca execute değilde prepare’in atandığı değişkenin ne dönderdiğini kontrol etmek mantıksız değil mi execute prepare atandıktan sonra geliyor, prepare’i değişkenini değiştirmesi mümkün mü ki?

    1. execute’u degişkene atmamızın sebebi veri ekleme işleminin başarılı olup olmadığını if sorgusunda kontrol etmek için
      if ( $insert ){
      print “veri ekleme işlemi başarılı!”;
      }
      prepare atandığı değişkeni kontrol etmiyoruz orada $conn degişkenine bağlanarak veritabanındaki tablomuza veri ekleme işlemini belirtiyoruz.

  3. performans bakımından mesala anlık mesajlaşma sistemi uygulamalarda pdo mu yoksa mysqli mi daha performanslı olur ?
    yazı için teşekkürler.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

%d blogcu bunu beğendi: