Cumartesi, Nisan 20, 2024
Ana SayfaPHP DersleriPDO Class İle Veri Kontrolü

PDO Class İle Veri Kontrolü

Bugün sizlere çok güzel bir PDO Class anlatacağım arkadaşlar. Bu class sayesinde çok daha hızlı veri tabanı işlemleri yapabilirsiniz bende yazdığım sitelerde bu class kullanıyorum ve fazladan kod yazmam gerek kalmıyor.
Bu class Yılmaz Demir Arkadaşım yapmıştır. Öncelikle ona çok teşekkür ediyorum.
Github Adresi : https://github.com/yidemir/Pratik-PDO
Öncelikle Yukarıdaki adresten PDO Class sınıfını indirelim.

Kullanımı

Veri tabanın da ki tablolarla çalışırken en çok yaptığımız işlemler CRUD (yani veri ekleme, okuma, güncelleme ve silme) işlemleridir. Bunu baz alarak yazılan bu sınıf sayesinde veri çekme/okuma, ekleme, silme, düzenleme işlemlerini kolayca yapabiliyoruz.
Veri tabanın dan gelen veri; dizi (array) olarak değil, obje (object) olarak dönmektedir. Örneğin $post['title'] yerine $post->title olarak kullanmanız gerekiyor.
Not: Object Döndürdüğü için mysql tablo yapısında isimler sayısal isimler olmamamı yani Tabloda 205×205 diye bir isim atadıysanız çalışmaz Bu isim yerine haberresim205x205 olsun 🙂

Bağlantı Kurma ve Ayarlar

$db = new Database('localhost', 'Veritabanı adı', 'Kullanıcı adı', 'Şifre');

Ben genelde bağlantı kurmak için yukardaki kodu kendime göre değiştirip database.class.php dosyasının en alt satırına yazıyorum.

Tekil Veri Çekme (getOne)

Bir satır veri çekmek için kullanılan kod :

$yazi = Database::getOne('haber', 'WHERE created = ?', array('2015-04-15 12:24:14'));
echo $yazi->baslik;

Diğer Örnekler ;
İd ile Gelen tekil veri çekme ;

$id = $_GET['id'];
$ilan2 = Database::getOne('isilanlari', 'WHERE id=?', array($id));
echo $ilan2 ->ilanno;

Tekil Veri Çekme (execOne)

Bir satır veri çekmek için ya da sorgu çalıştırmak için kullanılır;

$post = Database::execOne('SELECT * FROM post WHERE created = ?', array('2015-04-15 12:24:14'));
echo $post->title;

Tekil Veri Çekme (getId)

ID’ye göre tek satır veri çekmek için kullanılır;

$kategori = Database::getId('haberkat', 5);
echo $kategori->name;

Çoklu Veri Çekme (getAll)

Şart ve parametlere göre veritabanından çoklu veri çeker;

$posts = Database::getAll('post', 'WHERE draft = ?', array(0));
foreach ($posts as $post) {
  echo $post->title . '<br>';
}

Çoklu Veri Çekme (execAll)

Şart ve parametlere göre veritabanından SQL kodları ile çoklu veri çeker;

$posts = Database::execAll('SELECT * FROM post WHERE draft = ?', array(0));
foreach ($posts as $post) {
  echo $post->title . '<br>';
}

Veri Ekleme

Tabloya kolayca veri eklememizi sağlar ;

$insert = Database::insert('post', array(
  'title' => $_POST['title'],
  'body' => $_POST['body'],
  'draft' => 0
));
echo $insert ? $insert . ' numaralı gönderi eklendi' : 'Gönderi eklenemedi';

Veri Güncelleme

Eğer veritbanındaki belirli ID’ye ait satırı güncellemek istersek;

$update = Database::update('post', 5, array(
  'title' => 'Yeni gönderi başlığı',
  'body' => 'Düzenlenen yeni gönderi içeriği',
  'draft' => 0
));
echo $update ? 'Gönderi başarıyla güncellendi' : 'Gönderi güncellenemedi';

Eğer ID olmadan farklı şart ve parametrelere göre güncellemek istersek şöyle kullanıyoruz;

$update = Database::update('post', 0, array(
  'title' => 'Yeni gönderi başlığı',
  'body' => 'Düzenlenen yeni gönderi içeriği',
  'draft' => 0
), 'WHERE title = ?', array('Eski gönderi başlığı'));
echo $update ? 'Gönderi başarıyla güncellendi' : 'Gönderi güncellenemedi';

Veri Silme

Güncelleme ile aynı şekilde sadece ID’ye göre silmek için ;

$delete = Database::delete('post', 5);
echo $delete ? 'Gönderi başarıyla silindi' : 'Gönderi silinemedi';

ID olmadan, farklı şart ve parametrelerle silme işlemi yapmak istersek şu şekilde kullanıyoruz;

$delete = Database::delete('post', 0, 'WHERE title = ?', array('Silinmelik gönderi'));
echo $delete ? 'Gönderi başarıyla silindi' : 'Gönderi silinemedi';

Toplam Satır Sayısı Alma

Genel de en çok sayfalama için toplam satır sayısı alnırı ;

$count = Database::count('post');
echo $count ? 'Toplam ' . $count . ' gönderi mevcut' : 'Henüz hiç gönderi yok';

Veya

$count = Database::count('post', 'WHERE draft = ?', array(0));
echo $count ? 'Toplam ' . $count . ' yayımda olan gönderi mevcut' : 'Henüz hiç yayımlanmış gönderi yok';

veya SQL sorgusunu manuel yazmak gerekirse execCount() methodunu kullanabiliriz ;

$count = Database::execCount('SELECT * FROM post WHERE draft = ?', array(1));
echo $count ? 'Toplam ' . $count . ' taslak olan gönderi mevcut' : 'Hiç taslak gönderi yok';
RELATED ARTICLES

13 YORUMLAR

  1. Delete fonksiyonda bir hata varmı sarta baglı silmeye calısıyorum direk siliyor?
    $delete = Database::delete(‘post’, 0, ‘WHERE title = ?’, array(‘Silinmelik gönderi’));
    echo $delete ? ‘Gönderi başarıyla silindi’ : ‘Gönderi silinemedi’;

  2. Merhaba,
    PHP pek bilmiyorum çok acemiyim,
    PDO ve class kullanarak bir login, register yazmaya çalışıyorum tabi örnekleri kendime göre uyarlayarak yapmaya çalışıyorum.
    Örneklerinizde veribağlantı için $db değişkeni kullanmadınız bu nasıl bağlanıyorum?
    $db = new Database(‘localhost’, ‘Veritabanı adı’, ‘Kullanıcı adı’, ‘Şifre’);
    Acemi ile kör bir derler

  3. Yukarıda verdiğiniz tüm örnekleri çalıştırdım
    örnek tablom şu:
    Tablo adı: users
    user_id
    user_name
    user_email
    Aşağıdakileri çalıştıramadım
    ————————————-
    $kategori = Database::getId(‘users’, 5);
    echo $kategori->user_name;
    ————————————-
    // Bu bir tane veri çekti
    $posts = Database::getAll(‘users’, ‘WHERE user_id = ?’, array(5));
    foreach ($posts as $post) {
    echo $post->user_name . ”;
    }
    ————————————-
    // Buda bir tane veri çekti
    $posts = Database::execAll(‘SELECT * FROM users WHERE user_id = ?’, array(3));
    foreach ($posts as $post) {
    echo $post->user_name . ”;
    }
    ————————————-
    // Güncelleme yapmıyor database.class.php on line 226
    $update = Database::update(‘users’, 5, array(
    ‘user_name’ => ‘Hüsnü’,
    ‘user_email’ => ‘husnu@gmail.com’
    ));
    echo $update ? ‘Gönderi başarıyla güncellendi’ : ‘Gönderi güncellenemedi’;
    ———————————-
    // Güncelliyor ancak “Gönderi güncellenemedi”
    $update = Database::update(‘users’, 0, array(
    ‘user_name’ => ‘Hüsnü GENÇ’,
    ‘user_email’ => ‘genchusnu@gmail.com’
    ), ‘WHERE user_name = ?’, array(‘Cihan_GENÇ’));
    echo $update ? ‘Gönderi başarıyla güncellendi’ : ‘Gönderi güncellenemedi’;
    ———————————-
    Bu user_id 6 olan satırı silmiyor database.class.php on line 226
    $delete = Database::delete(‘users’, 6);
    echo $delete ? ‘Gönderi başarıyla silindi’ : ‘Gönderi silinemedi’;
    ———————————
    // Henüz hiç yayımlanmış gönderi yok diyor
    $count = Database::count(‘users’, ‘WHERE user_name = ?’, array(0));
    echo $count ? ‘Toplam ‘ . $count . ‘ yayımda olan gönderi mevcut’ : ‘Henüz hiç yayımlanmış gönderi yok’;
    ——————————–
    // buda Hiç taslak gönderi yok diyor
    $count = Database::execCount(‘SELECT * FROM users WHERE user_name = ?’, array());
    echo $count ? ‘Toplam ‘ . $count . ‘ taslak olan gönderi mevcut’ : ‘Hiç taslak gönderi yok’;
    Yukarıdaki örneklerden ben nerde yanlış yapıyorum?

  4. Tekrar merhaba,
    Aşağıdaki gibi bir class yapmaya çalışıyorum
    database.class.php yi neyere include etmem lazım?
    Yukarıda örnek verdiğiniz sorguları class içinde nasıl kullanmak lazım bir örnek gösterebilirmisiniz?
    $this-> kullanmak gerekiyormu? veya nerelerde kullanmak lazım
    class Login
    {
    public $errors = array();
    public $messages = array();
    public function __construct()
    {
    session_start();
    if (isset($_GET[“logout”])) {
    $this->doLogout();
    }
    elseif (isset($_POST[“login”])) {
    $this->dologinWithPostData();
    }
    }
    private function dologinWithPostData()
    {
    }
    public function doLogout()
    {
    $_SESSION = array();
    session_destroy();
    $this->messages[] = “Çıkış yaptınız.”;
    }
    public function isUserLoggedIn()
    {
    if (isset($_SESSION[‘login_status’]) AND $_SESSION[‘login_status’] == 1) {
    return true;
    }
    return false;
    }
    }

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz

Most Popular

Recent Comments