Basit PDO Sınıfı ile Veritabanı İşlemlerini Kolaylaştırmak

Neden böyle bir şeye ihtiyaç var diye düşünebilirsiniz belki. Ama acemi ve yeni öğrenen arkadaşlar için böyle bir şey paylaşmak gerekiyor. PDO çok fazla kafa karıştıracak bir şey değil aslında ama öğrenme sürecinde sıkıntı çıkarabiliyor. Özellikle de mysql_connect() fonksiyonundan geçişlerde sancılı olabiliyor. Aşağıda yazdığım sınıf oldukça basit bir kullanıma sahip.

<?php
/**
 * Basit bir veritabanı sınıfı
 * Sorguları çalıştırır
 * PDO ile fetch, fetchAll, fetchColumn ... gibi metodlar
 * zincirleme çalıştırılabilir ve kullanılabilir.
 * 
 * @link http://demirphp.com
 * @author Yılmaz Demir <demiriy@gmail.com>
 */
class BasitPDO
{
   /**
    * PDO sınıfını tutar
    * @var void
    */
   public static $pdo;
   /**
    * PDO bağlantısını kurar
    * @param void $pdo
    */
   public function __construct(\PDO $pdo)
   {
      self::$pdo = $pdo;
   }
   /**
    * Sorgu çalıştırır
    * @param string $query
    * @return void
    */
   public static function query($query)
   {
      if (!self::$pdo instanceof \PDO) {
         throw new \Exception('PDO bağlantısı yapılmamış');
      }
      $stmt = self::$pdo->prepare($query);
      $args = array_slice(func_get_args(), 1);
      if (isset($args[0]) && is_array($args[0])) {
         $stmt->execute($args[0]);
      } else {
         $stmt->execute($args);
      }
      return $stmt;
   }
}

Yukarıdaki dosyayı kaydedelim. Öncelikle veritabanı ayarını yapalım.

Connection.php


$pdo = new \PDO('mysql:host=localhost;dbname=database;charset=utf8', 'kullaniciadi', 'sifre');
$basit_pdo = new BasitPDO($pdo);

Ne yapmak istiyorsunuz? Veritabanından bir tek gönderi mi birden fazla gönderi mi çekmek istiyorsunuz? Bütün haberleri çekelim:

Haberler.php

require 'Connection.php';
$haberler = BasitPDO::query('SELECT * FROM haberler WHERE onaylanmis=?', 'evet')->fetchAll();
 
foreach ($haberler as $key => $haber) {
   echo $haber['baslik'] . '
';
}

Haber.php?id=5

require 'Connection.php';
$id = $_GET['id'];
$haber = BasitPDO::query('SELECT * FROM haberler WHERE id=?', $id)->fetch();
echo $haber['baslik'];

HaberSayisi.php

require 'Connection.php';
$haberSayisi = BasitPDO::query('SELECT * FROM haberler')->rowCount();
// ya da
$haberSayisi = BasitPDO::query('SELECT COUNT(id) FROM haberler')->fetchColumn();
echo $haberSayisi;

Ekleme/Düzenleme/Silme

require 'Connection.php';
$ekle = BasitPDO::query('INSERT INTO haberler (baslik, icerik) VALUES (:baslik, :icerik)', [':baslik' => 'Başlık', ':icerik' => 'İçerik']);
$duzenle BasitPDO::query('UPDATE haberler SET baslik=:baslik WHERE id=:id', [':baslik' => 'Yeni Başlık', ':id' => $_GET['id']]);
$sil = BasitPDO::query('DELETE FROM haberler WHERE id=?', $_GET['id']);