Classın Kodları
<?php
/**
* @Yazar Talha Keskin
* @copyright www.talhakeskin.com.tr
* Bismillahirrahmanirrahim
*/
class veritabaniislem{
public $veritabani = "matbaa";
public $host="localhost";
public $hesap="root";
public $sifre="";
public $baglan;
public $bilgial = array();
function __construct()
{
try{
$this->baglan = new PDO("mysql:host=$this->host;dbname=$this->veritabani",$this->hesap,$this->sifre);
$this->baglan->exec("SET NAMES UTF8 COLLATE utf8_turkish_ci");
}catch(PDOException $e){
echo $e->getMessage();
}
}
function VeriOkuTek($tablo,$alan,$sartalan,$sartkarsilik)
{
$dondur =NULL;
$yenisorgu = "SELECT $alan FROM $tablo WHERE $sartalan=?";
$stuncek = $this->baglan->prepare($yenisorgu);
$stuncek->execute(array($sartkarsilik));
$dondur = $stuncek->fetch(PDO::FETCH_OBJ);
return $dondur->{$alan};
}
function VeriOkuCoklu($tablo,$sartalan = array(), $sartkarsilik=array(),$order = "",$ordertur ="",$limit=""){
if(count($sartalan)==0){
$this->bilgial=null;
if($order!="" AND $limit==""){
$alancek = $this->baglan->query("SELECT * FROM $tablo ORDER BY $order $ordertur");
}elseif($order!="" AND $limit!=""){
$alancek = $this->baglan->query("SELECT * FROM $tablo ORDER BY $order $ordertur LIMIT $limit");
}
elseif($order=="" AND $limit==""){
$alancek = $this->baglan->query("SELECT * FROM $tablo");
}
$sayi = $alancek->rowCount();
if($sayi==0){
@$this->bilgial[]=NULL;
}else{
foreach($this->baglan->query("SELECT * FROM $tablo",PDO::FETCH_OBJ) as $row)
{
@$this->bilgial[]=$row;
}
}
}else{
$this->bilgial=null;
$birlestir ="";
foreach($sartalan as $sartal){
$birlestir .= $sartal."=? AND ";
}
$kes = trim(substr($birlestir,0,-4));
if($order!="" AND $limit==""){
$yenisorgu = "SELECT * FROM $tablo"." WHERE $kes ORDER BY $order $ordertur";
}elseif($order!="" AND $limit!=""){
$yenisorgu = "SELECT * FROM $tablo"." WHERE $kes ORDER BY $order $ordertur LIMIT $limit";
}elseif($order=="" AND $limit=="") {
$yenisorgu = "SELECT * FROM $tablo"." WHERE $kes";
}
$alancek = $this->baglan->prepare("$yenisorgu");
$alancek->execute($sartkarsilik);
while($row = $alancek->fetch(PDO::FETCH_OBJ)){
$this->bilgial[] = $row;
}
}
}
function veriEkle($tablo,$sartalan = array(), $sartkarsilik=array()){
$sayi=0;
$birlestir ="";
foreach($sartalan as $sartal){
$birlestir .= $sartal.",";
}
$kes = trim(substr($birlestir,0,-1));
$ekleme=$this->baglan->prepare("INSERT INTO $tablo VALUES ($kes)");
$ekleme->execute($sartkarsilik);
if($ekleme){
$sayi=1;
}else{
$sayi=0;
}
return $sayi;
}
function veriGuncelle($tablo,$sartalan = array(), $sartkarsilik=array(),$where){
$sayi=0;
$birlestir ="";
foreach($sartalan as $sartal){
$birlestir .= $sartal."=?,";
}
$kes = trim(substr($birlestir,0,-1));
$ekleme=$this->baglan->prepare("UPDATE $tablo SET $kes WHERE $where=?");
$ekleme->execute($sartkarsilik);
if($ekleme){
$sayi=1;
}else{
$sayi=0;
}
return $sayi;
}
function veriGuncelleCoklu($tablo,$sartalan = array(), $sartkarsilik=array(),$where=array()){
$sayi=0;
$birlestir ="";
foreach($sartalan as $sartal){
$birlestir .= $sartal."=?,";
}
$kes = trim(substr($birlestir,0,-1));
$wherealan ="";
foreach($where as $sartal){
$wherealan .= $sartal."=? AND";
}
$keswhere = trim(substr($wherealan,0,-4));
$ekleme=$this->baglan->prepare("UPDATE $tablo SET $kes WHERE $keswhere");
$ekleme->execute($sartkarsilik);
if($ekleme){
$sayi=1;
}else{
$sayi=0;
}
return $sayi;
}
function veriSil($tablo,$sartalan = array(), $sartkarsilik=array()){
$sayi = 0;
$birlestir ="";
foreach($sartalan as $sartal){
$birlestir .= $sartal."=? AND ";
}
$kes = trim(substr($birlestir,0,-4));
$silme=$this->baglan->prepare("DELETE FROM $tablo WHERE $kes");
$silme->execute($sartkarsilik);
if($silme){
$sayi=1;
}else{
$sayi=0;
}
}
function veriSaydir($tablo,$sartalan = array(), $sartkarsilik=array()){
$sayi=0;
if(count($sartalan)==0){
$sorgu = $this->baglan->prepare("SELECT * FROM $tablo");
$sorgu->execute($sartkarsilik);
$sayi = $sorgu->rowCount();
}else{
$birlestir ="";
foreach($sartalan as $sartal){
$birlestir .= $sartal."=? AND ";
}
$kes = trim(substr($birlestir,0,-4));
$sorgu = $this->baglan->prepare("SELECT * FROM $tablo WHERE $kes");
$sorgu->execute($sartkarsilik);
$sayi = $sorgu->rowCount();
}
return $sayi;
}
function veriEkleSayiAl($tablo,$sartalan = array(), $sartkarsilik=array()){
$sayi=0;
$birlestir ="";
foreach($sartalan as $sartal){
$birlestir .= $sartal.",";
}
$kes = trim(substr($birlestir,0,-1));
$ekleme=$this->baglan->prepare("INSERT INTO $tablo VALUES ($kes)");
$ekleme->execute($sartkarsilik);
$sayi = $this->baglan->lastInsertId();
return $sayi;
}
function VeriOkuMulti($sorgu) {
$this->bilgial = null;
$statement = $this->baglan->query("$sorgu",PDO::FETCH_OBJ);
$statement->nextRowset();
$rowset = $statement->fetchAll();
foreach($rowset as $row) {
$this->bilgial[]=$row;
}
}
function VeriOkuCokluSorgu($sorgu){
$this->bilgial=null;
foreach($this->baglan->query("$sorgu",PDO::FETCH_OBJ) as $row){
$this->bilgial[]=$row;
}
}
function veriSaydirSorgu($sorgu,$sart = array()){
$sayi=0;
$sorgu = $this->baglan->prepare("$sorgu");
$sorgu->execute($sart);
$sayi = $sorgu->rowCount();
return $sayi;
}
function urlYap($baslik){
$baslik = str_replace(array(""","'"), NULL, $baslik);
$bul = array('Ç', 'Ş', 'Ğ', 'Ü', 'İ', 'Ö', 'ç', 'ş', 'ğ', 'ü', 'ö', 'ı', '-');
$yap = array('c', 's', 'g', 'u', 'i', 'o', 'c', 's', 'g', 'u', 'o', 'i', ' ');
$perma = strtolower(str_replace($bul, $yap, $baslik));
$perma = preg_replace("@[^A-Za-z0-9\-_]@i", ' ', $perma);
$perma = trim(preg_replace('/\s+/',' ', $perma));
$perma = str_replace(' ', '-', $perma);
return $perma;
}
function __destruct(){
$this->baglan=null;
}
}
/*
Merhaba, Bu benim yazdığım gelişmiş bir PDO clasıdır. içerisinde heerşeyi bulabilirsin.
Clasın kullanımı bssittir. Herhangi sorgu yazmana gerek kalmadan bu classı kullanabilirsin. Örneklerle daha iyi anlarsın.
Classın kullanımına geçmeden önce her fonksionyda $sayi değeri mevcut bu $sayi değeri etkilenen satır sayısını geri döndürür.
Yani
$sayi = fonksiyon şeklinde kullanırsın mesela bir veri silersin. Ardından if yaparsın
if($sayi>0)
{
echo"veri eklenmiştir";
}else
{
echo"veri eklenememiştir";
}
gibi. her fonksiyonun sonunda $sayi döner yani kullanabilirsin.
Classı kullanırken dikkat etmen gereken şey, class AND Sorguları için yazıldı. Eğer OR Ya da farklı bir şey kullanacaksan o zaman sonunda sorgu olan
fonksiyonları kullan örneklere geçiyorum daha iyi anlarsın.
Öncelikle Classı tanımlayalım.
$db = new veritabaniislem();
------Örnek 1 Tek sorgu çekmek:------
Senaryo : Sitemizin arama motorlarında görünecek başlığını <title> </title> Tagları arasına yazalım. veritabanındaki alanın adı title olsun tablo adı da
ayarlar olsun ID değeri de 1 olsun
Burada tek veri çekeceğimizden VeriOkuTek fonksiyonunu kullanacaksın demektir.
<title><?=$db->VeriOkuTek("ayarlar","title","ID",1)?></title>
Bu sorgu ile ayarlar tablosundaki ID değeri 1 olan title alanını çekersin.
Senin senaryonda uyeler tablosundan ID değeri 15 olan üyenin kullaniciadi adlı alanını çekelim.
$uyeid = $db->VeriOkuTek("uyeler","kullaniciadi","ID",15);
------Örnek 2 Şarta Bağlı Olmadan Çoklu Kayıt Çekmek------
Senaryo: Veritabanında uyeler tablosundaki tüm üyeleri çekelim ve bir table değerinin içerisine yazdıralım.
Veritabanındaki tablo adımız uyeler olsun alanlar | ID | uyeadi | babaadi | anaadi |
<table>
<tr>
<td>Üye Adı</td>
<td>Baba Adı</td>
<td>Ana Adı</td>
</tr>
<?php
$db->VeriOkuCoklu("uyeler");
foreach($db->bilgial as $row)
{
?>
<tr>
<td><?=$row->uyeadi?></td>
<td><?=$row->babadi?></td>
<td><?=$row->anaadi?></td>
</tr>
<?php
}
?>
</table>
----- Örnek 3 Veritabanından baba adı mahmut olan üyeleri çekelim ve yazdıralım -----
<table>
<tr>
<td>Üye Adı</td>
<td>Baba Adı</td>
<td>Ana Adı</td>
</tr>
<?php
$db->VeriOkuCoklu("uyeler",array("babadi"),array("mahmut"));
foreach($db->bilgial as $row)
{
?>
<tr>
<td><?=$row->uyeadi?></td>
<td><?=$row->babadi?></td>
<td><?=$row->anaadi?></td>
</tr>
<?php
}
?>
</table>
Burada dikkat etmen gereken kısım 1. array hangi alanlarda şart aranıyor, 2 array ise o alanlara karşılık olarak ne gelecek
----- Örnek 4 Veritabanından baba adı mahmut ve anne adı kezban olan üyeleri çekelim ve yazdıralım -----
<table>
<tr>
<td>Üye Adı</td>
<td>Baba Adı</td>
<td>Ana Adı</td>
</tr>
<?php
$db->VeriOkuCoklu("uyeler",array("babadi","anneadi"),array("mahmut","kezban"));
foreach($db->bilgial as $row)
{
?>
<tr>
<td><?=$row->uyeadi?></td>
<td><?=$row->babadi?></td>
<td><?=$row->anaadi?></td>
</tr>
<?php
}
?>
</table>
----- Örnek 5 Veritabanından baba adı mahmut ve anne adı kezban veya müzeyen olan üyeleri çekelim ve yazdıralım -----
Not: İşte burada dediğim sorgu fonksiyonları devreye girmekte çünkü sorguda hem and hem de or bulunmakta. Bu fonksiyonalrda düz sorgu yazmak gerek
JOIN Sorguları gibi karışık sorgularda bu metotla yazılmalıdır.
<table>
<tr>
<td>Üye Adı</td>
<td>Baba Adı</td>
<td>Ana Adı</td>
</tr>
<?php
$db->VeriOkuCokluSorgu("SELECT * FROM uyeler WHERE babadi='mahmut' AND (anneadi='kezban' or anneadi='müzeyyen'))");
foreach($db->bilgial as $row)
{
?>
<tr>
<td><?=$row->uyeadi?></td>
<td><?=$row->babadi?></td>
<td><?=$row->anaadi?></td>
</tr>
<?php
}
?>
</table>
----- Örnek 6 JOIN Sorgusu -----
Veritabanında bulunan uyeler tablosundaki kayıtlarla, uyedetayları adlı tabloda joın uygulayalım.
İki tabloda ortak alanlar uyeler tablosundaki ID ve uyedetayları tablosunda UyeID olsun ve UyeID'si 1 olan kişinin bilgilerini çekelim
<table>
<tr>
<td>Üye Adı</td>
<td>Baba Adı</td>
<td>Ana Adı</td>
</tr>
<?php
$db->VeriOkuCokluSorgu("SELECT * FROM uyeler u INNER JOIN uyedetaylari ud ON u.ID=ud.UyeID WHERE u.ID=1");
foreach($db->bilgial as $row)
{
?>
<tr>
<td><?=$row->uyeadi?></td>
<td><?=$row->babadi?></td>
<td><?=$row->anaadi?></td>
</tr>
<?php
}
?>
</table>
----- Örnek 7 Veri Eklemek -----
veritabanındaki üyeler tablosuna POST'tan gelen verileri ekleyelim
Veritabanındaki alanlarımız
ID - Birincil,Otomatik artan
uyeadi - varchar
babaadı - varchar
kayittarihi - date
Olsun.
Burada dikkat etmen gereken nokta PDO'da veriler execute edilirken otomatik artan alanlar NULL ile tarih alanları ise NOW ya da ? olarak temsil edilir.
Eğer tarih alanı otomatik olacaksa PHP'deki gibi date("d-m-Y") gibi bir sorgu tanımlamana gerek yok direk NOW() yaparsan işlem tamam olur
ama, eğer tarihi sen manuel olarak vermek istersen NOW() yerine ? yapıp parametreyi sen tanımlamalısın
$db->VeriEkle("uyeler",array("NULL","?","?","NOW()"),array($_POST["uyeadi"],$_POST["babadi"]));
Dikkat ettiysen sırasına göre sadece ? olan alanların karşılığını yazdım. NULL ve NOW alanlara parametre verilmez.
Eğer now() yaptığım alan ? olsaydı Sorgu şöyle olurdu
$db->VeriEkle("uyeler",array("NULL","?","?","?"),array($_POST["uyeadi"],$_POST["babadi"],date("d-m-"Y")));
----- Örnek 8 Veri Güncelleme -----
Veritabanındaki üyeler tablosunda ID değeri 10 olan üyenin uyeadi adlı alanını $_POST["uyeadi"] değeri ile güncelleyelim
$db->VeriGuncelle("uyeler",array("uyeadi"),array($_POST["uyeadi"],10),"uyeid");
Burada dikkat etmen gereken 1. array alan adlarını alır
2. array güncelleme yapılacak kayıtları alır en sonda hangi alana göre güncellenecek bunu alır bu değerin karşılığı ise 2. array'ın en sonuna eklenir'
----- Örnek 9 Veri Güncelleme -----
Veritabanındaki üyeler tablosunda ID değeri 10 olan üyenin uyeadi adlı alanını ve babadi adlı alanını
$_POST["uyeadi"],$_POST["babaadi"] değerleri ile güncelleyelim
$db->VeriGuncelle("uyeler",array("uyeadi","babadi"),array($_POST["uyeadi"],$_POST["babaadi"],10),"uyeid");
----- Örnek 9 Çoklu Veri Güncelleme -----
Veritabanındaki üyeler tablosunda ID değeri 10 olan ve 15 olan üyenin uyeadi adlı alanını ve babadi adlı alanını
$_POST["uyeadi"],$_POST["babaadi"] değerleri ile güncelleyelim
$db->VeriGuncelle("uyeler",array("uyeadi","babadi"),array($_POST["uyeadi"],$_POST["babaadi"],10,15),array("uyeid","uyeid"));
----- Verislme ------
veritabanından uyeler tablosundan ID'si 1 olan üyeyi silelim'
$db->veriSil("uyeler",array(ID),array(1));
-----Çoklu Şart Bağlı Veri Silme----
veritabanından uyeler tablosundan ID'si 1 olan ve kullaniciid'si talha olan üyeyi, silelim
$db->veriSil("uyeler",array("ID","kullaniciid"),array(1,"talha"));
-----Veri Saydırma-----
mysql'de mysql_num_rows fonksiyonu ile aynı işlevi görür'
Örnek veritabanında uyeler tablosunda kullaniciadi alanı talha ve babaadi alanı sinan olan kayıt var mı bakalım
$sayi = $db->veriSaydir("uyeler",array("kullaniciadi","babaadi"),array("talha","sinan"));
if($sayi>0)
{
echo"Kayıt Var";
}else
{
echo"Kayıt YOk";
}
------------------------------------------Ekstra Örnekler----------------------------
------Veritabanından Kayıt Silmek İstedik Ancak Silindimi Emin Olmak İstiyoruz Yani-----
$sil= mysql_query("DELETE FROM uyeler WHERE UyeID=1")
if($sil)
{
echo"üye Silindi"
}else
{
echo"üye silinemedi";
}
Kodlarına karşılık gelen kodu classla yazalım. Başta da söylediğim gibi her fonksiyon içerisinde $sayi değişkenini döndürüyor.
$silindimi = veriSil("uyeler",array("UyeID"),array(1));
if($silindimi>0)
{
echo"Üye Silindi";
}else
{
echo"Üye Silinemedi";
}
----Veritabanına üye ekleyelim daha sonra bu üyenin ID'sine bağlı olarak üyedetayları adlı tabloya'da kayıt ekleyelim''
Veritabanı alanlarımız üyeler tablosu için;
uyeler
ID - Otomatik artan
UyeMAIL- üyenin mail adresi
KullaniciADI- üyenin adı
Uyedetaylari adlı tablo için alanlar
uyedetayları
detayid - otomatik artan
uyeid - üyeler tablosuna bağlı bir alan int tipinde
uyefoto - varchar
Üyeyi ekleyelim
$eklenenid= $db->veriEkle("uyeler",array("NULL","?","?"),array($_POST["mail"],$_POST["kullaniciid"]))
şimdi eklenen son kayıt yani eklenenid alalım ve üye detayları tablosuna ekleyelim
$db->veriEle("uuyedetaylari",array("NULL","?","?"),array($eklenen,$_POST["uyefoto"]));
*/
?>