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';
Paylaşımınız için teşekkür ederim.
Merhaba .Biliyorsunuz, pdo’da $db->lastInsertId(); ile giden id’yi alabiyoruz. Bu class ile giden id’yi nasıl alabilirim ?
Hallettim verdiğiniz kodları editlemiştim, insert komutuyla zaten alabiliyormuşuz:)
Değerli paylaşımınızdan dolayı teşekkür ederim.
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’;
Kendi kodunuzu yazarsanız daha sağlıklı yardımcı olabilirim
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
Denemeler yaptım $db değişkeni gerekmiyormuş Database:: değişkeni yetiyormuş
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?
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;
}
}
Güncel bi yapı kullanmanız daha sağlıklı olacaktır https://github.com/ThingEngineer/PHP-MySQLi-Database-Class dökümantasyonunda ayrıntılı bilgiler mevcut çok kolay bir şekilde class yapınıza ekliye bilirsiniz
Ben PDO kullanmak istiyorum önerdiğiniz MySQLi bağlantı
Sıfırdan kod yazacak bilgiye sahip değilim bu yüzden metcut kodlardan kendime göre uyarlamaya çalışıyorum
Yapmak istediğim PDO, Class ve token sistemli login, kayıt, şifremi unuttum scripti oluşturmaya çalışıyorum
Mssql yada Oracle mi çalışacaksınız