Php veritabanı sınıfı

Başlatan canosayan, 18 Aralık 2010 - 12:01:57

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

canosayan

Bir süredir malum sudo dergimizde mysql gidiyoruz. bende boş zamanlanrım da işleri kolaylaştıracak bir sınıf üzerinde çalışmaya başladım. Paylaşayım belki başkalarınında ilgisini çeker dedim.


class phpdb
{
    public $sorgu=null;
    //sorgumuzun sql'i'
    public $sql="";
    //seçim yap
    private $sec="";
    private $secDizi=array();
    //tablo
    private $tablo="";
    //şartları yazalın
    private $sart="";
    private $sartDizi=array();
    //grup
    private $group="";
    private $groupDizi=array();
    //dizilim yapmak lazım
    private $order="";
    private $orderDizi=array();
    //limit
    private $baslangic=Null;
    private $sefer=Null;
    //ekleme yada güncelleme için sutun adları
    private $ekle="";
    private $ekleDizi=array();
    //veriler
    private $cokluKayit=false;
    private $veri="";
    private $veriDizi=array();
    //degiştirmek için
    private $degis="";
    private $degisDizi=array();
    //sorgu bilgileri
    private $sorgusure="";
    //bu zamana kadar yapılmış sorgular
    public $sorguDizi=array();
    //temizlik dizisi
    private $temizlikDizi=array(" ",".","`",";",'"',"'");
    private $sartAraclari=array("=","<>",">","<",">=","<=","BETWEEN","LIKE","IN");
    //hata bilgileri
    public $hata=array();

    public function __construct()
    {
        //veritabanına bağlan
        mysql_connect(db_sunucu,db_kullanici,db_sifre);
        mysql_select_db(db_veritabani);
    }

    public function __destruct()
    {
        $this->kayitCikti();
    }

    public function sifirla()
    {
        $this->sorgu=null;
        //sorgumuzun sql'i'
        $this->sql="";
        //seçim yap
        $this->sec="";
        $this->secDizi=array();
        //tablo
        $this->tablo="";
        //şartları yazalın
        $this->sart="";
        $this->sartDizi=array();
        //grup
        $this->group="";
        $this->groupDizi=array();
        //dizilim yapmak lazım
        $this->order="";
        $this->orderDizi=array();
        //limit
        $this->baslangic=Null;
        $this->sefer=Null;
        //ekleme yada güncelleme için sutun adları
        $this->ekle="";
        $this->ekleDizi=array();
        //veriler
        $this->cokluKayit=false;
        $this->veri="";
        $this->veriDizi=array();
        //degiştirmek için
        $this->degis="";
        $this->degisDizi=array();
        //sorgu bilgileri
        $this->sorgusure="";
    }

    //hata ekleyelim log tutalım
    public function hataKayıt()
    {
        $hata=mysql_error();
        $numara=mysql_errno();
        $this->hata[]=array($this->sql,time(),$numara,$hata,$this->sorguSure);
        unset($hata,$numara);
    }

    //özel bir hatayı kaydetmek için
    public function ozelHataKayıt($mesaj)
    {
        $this->hata[]=array($this->sql,time(),"",$mesaj,"0");
    }

    //log tutalım bu sefer sorunsuz olsun
    public function sorguKayit()
    {
        $bilgi=mysql_info();
        $satir=mysql_affected_rows();
        $this->sorguDizi[]=array($this->sql,time(),$bilgi,$satir,$this->sorguSure);
    }

    //sorguları yazalım
    public function kayitCikti()
    {
        if(db_soruncoz)
        {
            echo '<style type="text/css">#mysqllog{font-size:10px; max-width:500px; margin:auto; border:1px solid #e9cbcb} #mysqllog tr td{padding-left:2px; padding-right:2px;}#mysqllog tr:hover{background-color:#efeaea;}</style>';
            echo '<table id="mysqllog">';
            if(count($this->hata)>0)
            {
                echo '<tr><td colspan="5">Hata<hr/></td></tr>';
                echo '<tr><td>Sorgu</td><td>Zaman</td><td>Bilgi</td><td>Satır</td><td>Süre</td></tr>';
                foreach($this->hata as $tek)
                {
                    echo '<tr>
                    <td>'.$tek[0].'</td>
                    <td>'.date("d.m.Y h:i:s",$tek[1]).'</td>
                    <td>'.$tek[2].'</td><td>'.$tek[3].'</td><td>'.$tek[4].'</td>
                    </tr>';
                }
            }
            if(count($this->sorguDizi)>0)
            {
                echo '<tr><td colspan="5">Sorgular<hr/></td></tr>';
                echo '<tr><td>Sorgu</td><td>Zaman</td><td>Numara</td><td>Bilgi</td><td>Süre</td></tr>';
                foreach($this->sorguDizi as $tek)
                {
                    echo '<tr>
                    <td>'.$tek[0].'</td>
                    <td>'.date("d.m.Y h:i:s",$tek[1]).'</td
                    ><td>'.$tek[2].'</td><td>'.$tek[3].'</td><td>'.$tek[4].'</td>
                    </tr>';
                }
            }

            echo '</table>';
        }
    }

    //herhangi bir metni alır özel karakterleri siler geri gönderir.
    public function temizlik($oge)
    {
        //gelen öğeleri temizlik yaparak gönderelim
        $oge=str_replace($this->temizlikDizi,"",$oge);
        return $oge;
    }

    //metin içindeki tırnakları değiştir
    public function tirnakDegisimi($oge)
    {
        //gelen öğeleri temizlik yaparak gönderelim
        $oge=str_replace("'","\'",$oge);
        return $oge;
    }


    /*select için gelen dizi yaza metin parçasını formatlar ters tırnak ekleyip geri verir.
        $sec:(dizge veya dizi) seçilecek öğeler kullanımı array("sutun1","sutun2","sutun3") veya sutun1,sutun2,sutun3
    */
    public function select($sec)
    {
        //bir şeyleri sil aradan
        $sec=$this->temizlik($sec);
        if(is_array($sec))
        {
            //dizi ise birleştir ve ters tırnak ekle
            $sec=implode('`,`',$sec);
            $eec='`'.$sec.'`';
            $this->secDizi[]=$sec;
        }
        else
        {
            //virgüle göre böl ve birleştir
            $sec=explode(",",$sec);
            $sec=implode('`,`',$sec);
            $eec='`'.$sec.'`';
            $this->secDizi[]=$sec;
        }
        $this->sec='`'.implode(",",$this->secDizi).'`';
    }

    /*veriyi alıp from öğesi yap
        $from:(dizge) select öğesi için tablo seçimi
    */
    public function from($from)
    {
        $from=$this->temizlik($from);
        //tabloyu ayarla
        $this->tablo=$from;
    }

    /*şartları alıp yazalım eğer dizi geliyorsa diziyi bölelim  gelmiyorsa tek dizi şart yazarız
        $sart:(dizge yada dizi) şart dizisi yada sutunu olarak kullanılır. ek özel işaretlerin eklenmesini sağlar. Kullanımı dizi olarak array("sutun_adi >"=>"değer","sutun_adi2"=>"deger2") dizge olarak ise sutun_adi
        $deger:(dizge) şart olarak kullanılan sutunun değeri
    */
    public function where($sart,$deger="")
    {
        if(is_array($sart))
        {
            //eğer şart dizi ise
            foreach($sart as $anahtar=>$tek)
            {
                if(strpbrk($anahtar," ")!==false)
                {
                    //eğer anahtarda noşlık varsa özel bir araç olabilir
                    $anahtar=explode(" ",$anahtar);
                    $anahtar[0]=$this->temizlik($anahtar[0]);
                    if(!in_array($anahar[1],$this->sartAraclari))
                    {
                        $anahar[1]="=";
                    }
                    $tek=$this->tirnakDegisimi($tek);
                    $this->sartDizi[]='`'.$anahtar[0].'`'.$anahar[1]."'".$tek."'";
                }
                else
                {
                    $anahtar=$this->temizlik($anahtar);
                    $tek=$this->tirnakDegisimi($tek);
                    $this->sartDizi[]='`'.$anahtar."` = '".$tek."'";
                }
            }
        }
        else
        {
            //eğer dizi değilse
            if(strpbrk($sart," ")!==false)
            {
                //eğer anahtarda noşlık varsa özel bir araç olabilir
                $sart=explode(" ",$sart);
                $sart[0]=$this->temizlik($sart[0]);
                if(!in_array($anahar[1],$this->sartAraclari))
                {
                    $sart[1]="=";
                }
                $deger=$this->tirnakDegisimi($deger);
                $this->sartDizi[]='`'.$sart[0].'`'.$sart[1]."'".$deger."'";
            }
            else
            {
                $sart=$this->temizlik($sart);
                $deger=$this->tirnakDegisimi($deger);
                $this->sartDizi[]='`'.$sart."` = '".$deger."'";
            }
        }
        $this->sart=implode(" AND ",$this->sartDizi);
    }

    /*belli bir yönde dizebiliriz
        $sutun:(dizge veya dizi) belli bir sutuna göre dizmek için. kullanımı dizge olarak sutun1,sutun2,sutun3 yada dizi olarak array("sutun1","sutun2","sutun3") ayrıca bu tanımlama içerisinde yön belirtilebilir sutun1 ASC,sutun2 DESC,sutun3 ASC yda array("sutun1 DESC","sutun2 DESC","sutun3 ASC")
        $tur:(dizge) eğer tek bir dizilim sutunu varsa yön belirtmek için.
    */
    public function orderby($sutun,$tur="ASC")
    {
        if(strpbrk($sutun,",")!==false)
        {
            $sutun=explode(",",$sutun);
        }
        if(is_array($sutun))
        {
            //eğer dizi ise
            foreach($sutun as $tek)
            {
                if(strpbrk($tek," ")!==false)
                {
                    //eğer içinde boşluk varsa yön vardır
                    $tek=explode(" ",$tek);
                    $this->orderDizi[]="`".$tek[0]."` ".$tek[1];
                }
                else
                {
                    //boşlık yoksa
                    $this->orderDizi[]="`".$tek."` ";
                }
            }
        }
        else
        {
            $this->orderDizi[]="`".$sutun."` ".$tur.' ';
        }
        $this->order=implode(',',$this->orderDizi);
    }

    /*group by ile gruplayalım
        $sutun:(dizge veya dizi) gruplanacak sutun adı yada sutun adları dizisi
    */
    public function groupby($sutun)
    {
        if(strpbrk($sutun,",")!==false)
        {
            $sutun=explode(",",$sutun);
        }
        if(is_array($sutun))
        {
            //eğer dizi ise
            foreach($sutun as $tek)
            {
                //boşlık yoksa
                $this->groupDizi[]="`".$tek."` ";
            }
        }
        else
        {
            $this->groupDizi[]="`".$sutun."` ";
        }
        $this->group=implode(',',$this->groupDizi);
    }

    /*limit var mı bu işte
        $baslangic:(sayi) limit başlangıç değeri
        $sefer:(sayi) limitin sefer sayısı varsayılan 1000
    */
    public function limit($baslangic,$sefer=1000)
    {
        $this->sefer=(int) $sefer;
        $this->baslangic = (int) $baslangic;
    }

    /*sorgu haline getirelim
        $tablo:(dizge) eğer from fonksiyonu ile belirtilmediyse kullanılacak  tablo adı
    */
    public function get($tablo="")
    {
        //seç
        if($this->sec=="")
        {
            $this->sec='*';
        }
        $this->sql='SELECT '.$this->sec;
        //tablo
        if($this->tablo=="" && $tablo!="")
        {
            $this->tablo=$tablo;
        }
        if($this->tablo=="")
        {
            //bir hata var oılmaz böyle
            $this->ozelHataKayıt("Tablo belirlenmemiş");
        }
        $this->sql.=' FROM '.$this->tablo;
        //sart
        if(count($this->sartDizi)>0)
        {
            $this->sql.=' WHERE '.$this->sart;
        }
        //group işlemi
        if(count($this->groupDizi)>0)
        {
            $this->sql.=' GROUP BY '.$this->group;
        }
        //dizi işlemi
        if(count($this->orderDizi)>0)
        {
            $this->sql.=' ORDER BY '.$this->order;
        }
        //limit
        if(isset($this->baslangic) && isset($this->sefer) )
        {
            $this->sql.=' LIMIT '.$this->baslangic.','.$this->sefer;
        }
        //sorguyu yap işlem sürecini ölç
        $sorguOnce=microtime(true);
        $this->sorgu=mysql_query($this->sql);
        $sorguSonra=microtime(true);
        $this->sorguSure=round(($sorguSonra-$sorguOnce),5);
        unset($sorguSonra,$sorguOnce);
        if($this->sorgu===false)
        {
            //eğer hata olduysa
            $this->hataKayıt();
            //ilk günkü gibi
            $this->sifirla();
            return false;
        }
        else
        {
            //hata olmadıysa
            $this->sorguKayit();
            $veriDizi=array();
            $veriObje=array();
            while ($sonuc = mysql_fetch_array($this->sorgu))
            {
                $veriDizi[]=$sonuc;
                foreach($sonuc as $anahtar=>$tek)
                {
                    $gecici->$anahtar=$tek;
                }
                $veriObje[]=$gecici;
                unset($gecici);
            }
            //geriye döndüremek lazım
            $gecici=array(
                "veriDizi"=>$veriDizi,
                "veriObje"=>$veriObje,
                "sorgu"=>$this->sorgu,
                "satirSayisi"=>mysql_num_rows($this->sorgu),
                "sutunSayisi"=>mysql_num_fields($this->sorgu),
                "etkilenenSatir"=>mysql_affected_rows(),
                );
            //nesne olarak dönsün.
            //ilk günkü gibi
            $this->sifirla();
            return (object) $gecici;
        }
    }

    /*çok boyutlu bir diziyi eklerken yada standart bir diziyi eklerken eklenecek alanları belirlemek için.
        $add:(dizi) eklenecek veriler için kullanılacak sutunlar dizisi. veri ile aynı dizilimde olmalı
    */
    public function add($add)
    {
        //bir şeyleri sil aradan
        $add=$this->temizlik($add);
        if(is_array($add))
        {
            //dizi ise birleştir ve ters tırnak ekle
            $add=implode('`,`',$add);
            $add='`'.$add.'`';
            $this->ekleDizi[]=$add;
        }
        else
        {
            //virgüle göre böl ve birleştir
            $add=explode(",",$add);
            $add=implode('`,`',$add);
            $add='`'.$add.'`';
            $this->ekleDizi[]=$add;
        }
        //eklenecek olarak ekleyelim
        $this->ekle='`'.implode(",",$this->ekleDizi).'`';
    }

    /*verilen diziyi sisteme ekler
        $value:(dizi) sisteme eklenecek veriler dizisi kullanımı array("sutun_adi"=>"sutun_degeri")
    */
    public function value($value)
    {
        //eğer tek bir satır eklenecekse
        foreach($value as $anahtar => $tek)
        {
            $this->ekleDizi[]=$anahtar;
            $this->veriDizi[]=$this->tirnakDegisimi($tek);
        }
        $this->ekle="(`".implode("`,`",$this->ekleDizi)."`)";
        $this->veri="('".implode("','",$this->veriDizi)."')";
    }

    /*verilen çoklu diziyi toplu halde ekler
        $values:(dizi) çok boyutlu veri dizisi kullanımı: array(array("sutun_adi"=>"sutun_degeri"),array("sutun_adi"=>"sutun_degeri"),array("sutun_adi"=>"sutun_degeri"))
        $sutun:(dizi) ekleme yapılacak veriler ile uygun dizilimde sutun adları. eğer ayarlanmazsa sutun adları kullanılmadan eklenir.
    */
    public function values($value,$sutun=false)
    {
        $gecici=array();
        //anahtar dizisini ekleyelim.
        $this->ekleDizi=$sutun;
        foreach($value as $tek)
        {
            $tek=$this->tirnakDegisimi($tek);
            //her birini bir araya topla
            $gecici[]="('".implode("','",$tek)."')";
        }
        $this->veriDizi[]=$value;
        //hepsini birleştir.
        $this->veri=implode(",",$gecici);
    }

    /*tabloyu belirleyelim.
        $tablo:(dizge) eklenecek tablo adı:
    */
    public function into($tablo)
    {
        $from=$this->temizlik($tablo);
        //tabloyu ayarla
        $this->tablo=$tablo;
    }

    /*verileri ekleyelim
        $tablo:(dizge) tablo adı. into fonksiyonu ile de belirlenebilir.
        $veri:(dizi) eklenecek veriler. value veya values kullanılarak atlanabilir. eğer bu değişken kullanılırsa value ve values ile eklenen verilerin üzerine yazılır. kullanımı array("sutun_adi"=>"sutun_degeri")
        $ahahtarsiz:(doğru/yanlış) varsayılan false. eğer true olarak değiştirilirse sutun adları kullanılmadan ekleme yapılır.
    */
    public function insert($tablo="",$veri="",$anahtarsiz=false)
    {
        if($tablo=="" && $this->tablo=="")
        {
            //tablo verileri boş ise
            $this->ozelHataKayıt("Tablo belirlenmemiş");
        }
        else
        {
            if($tablo=="")
            {
                $this->sql='INSERT INTO '.$this->tablo.' ';
            }
            else
            {
                $this->sql='INSERT INTO '.$tablo.' ';
            }
        }
        if(is_array($veri))
        {
            //diziyi boşaltalım  yenisini ekleyelim
            $this->ekleDizi=array();
            $this->veriDizi=array();
            $this->value($veri);
        }
        if($this->ekleDizi!=false && $anahtarsiz==false)
        {
            $this->sql.=$this->ekle.' ';
        }
        $this->sql.='VALUES '.$this->veri;
        $sorguOnce=microtime(true);
        $this->sorgu=mysql_query($this->sql);
        $sorguSonra=microtime(true);
        $this->sorguSure=round(($sorguSonra-$sorguOnce),5);
        unset($sorguSonra,$sorguOnce);
        if($this->sorgu===false)
        {
            //eğer hata olduysa
            $this->hataKayıt();
            //ilk günkü gibi
            $this->sifirla();
            return false;
        }
        else
        {
            //hata olmadıysa
            $this->sorguKayit();
            $veriDizi=array();
            //geriye döndüremek lazım
            $gecici=array(
                "sorgu"=>$this->sorgu,
                "etkilenenSatir"=>mysql_affected_rows(),
                );
            //nesne olarak dönsün.
            //ilk günkü gibi
            $this->sifirla();
            return (object) $gecici;
        }
    }

    /*verileri güncellemekte lazım
        $sutun:(dizi yada dizge) dizi halinde değerler kullanımı array("sutun1"=>"deger1","sutun2"=>"deger2")
        $deger:(dizge) eğer tek bir değişiklik için sutun yazıldıysa o sutun için değer
    */
    public function change($sutun,$deger="")
    {
        if(is_array($sutun))
        {
            foreach($sutun as $anahtar => $tek)
            {
                $tek=$this->tirnakDegisimi($tek);
                $this->degisDizi[]="`".$anahtar."`='".$tek."'";
            }
            $this->degis=implode(", ",$this->degisDizi);
        }
        else
        {
            $this->degisDizi[]="`".$sutun."`='".$deger."'";
            $this->degis=implode(", ",$this->degisDizi);
        }
    }

    /*veri güncelleme
        $tablo:(dizi) from yada into fonksiyonu ile önceden ayarlanmamış ise tabloyu ayarlar
        $sutun:(dizi yada dizge) dizi halinde değerler kullanımı array("sutun1"=>"deger1","sutun2"=>"deger2")
    */
    public function update($tablo="",$sutun="")
    {
        if($this->tablo=="" && $tablo=="")
        {
            //tablo verileri boş ise
            $this->ozelHataKayıt("Tablo belirlenmemiş");
        }
        else
        {
            if($tablo!="")
            {
                //tabloyu alalım
                $this->sql='UPDATE '.$tablo.' ';
            }
            else
            {
                $this->sql='UPDATE '.$this->tablo.' ';
            }
        }
        if($sutun!="")
        {
            //sutun belirtilmişse öncekileri sayma
            $this->degisDizi=array();
            $this->change($sutun);
        }
        $this->sql.=' SET '.$this->degis.' ';
        if(count($this->sartDizi)>0)
        {
            //sart varsa
            $this->sql.=' WHERE '.$this->sart;
        }
        $sorguOnce=microtime(true);
        $this->sorgu=mysql_query($this->sql);
        $sorguSonra=microtime(true);
        $this->sorguSure=round(($sorguSonra-$sorguOnce),5);
        unset($sorguSonra,$sorguOnce);
        if($this->sorgu===false)
        {
            //eğer hata olduysa
            $this->hataKayıt();
            //ilk günkü gibi
            $this->sifirla();
            return false;
        }
        else
        {
            //hata olmadıysa
            $this->sorguKayit();
            //geriye döndüremek lazım
            $gecici=array(
                "sorgu"=>$this->sorgu,
                "etkilenenSatir"=>mysql_affected_rows(),
                );
            //ilk günkü gibi
            $this->sifirla();
            //nesne olarak dönsün.
            return (object) $gecici;
        }
    }

    /*silmekte gerekir
        $tablo:(dizi) from yada into fonksiyonu ile önceden ayarlanmamış ise tabloyu ayarlar
        $sart:(dizi) where fonksiyonuna gönderilmek için şart dizisi
    */
    public function delete($tablo="",$sart="")
    {
        if($this->tablo=="" && $tablo=="")
        {
            //tablo verileri boş ise
            $this->ozelHataKayıt("Tablo belirlenmemiş");
        }
        else
        {
            if($tablo!="")
            {
                //tabloyu alalım
                $this->sql='DELETE FROM '.$tablo.' ';
            }
            else
            {
                $this->sql='DELETE FROM '.$this->tablo.' ';
            }
        }
        if($sart!="")
        {
            $this->sartDizi=array();
            $this->where($sart);
        }
        if(count($this->sartDizi)>0)
        {
            //sart varsa
            $this->sql.=' WHERE '.$this->sart;
        }
        $sorguOnce=microtime(true);
        $this->sorgu=mysql_query($this->sql);
        $sorguSonra=microtime(true);
        $this->sorguSure=round(($sorguSonra-$sorguOnce),5);
        unset($sorguSonra,$sorguOnce);
        if($this->sorgu===false)
        {
            //eğer hata olduysa
            $this->hataKayıt();
            //ilk günkü gibi
            $this->sifirla();
            return false;
        }
        else
        {
            //hata olmadıysa
            $this->sorguKayit();
            //geriye döndüremek lazım
            $gecici=array(
                "sorgu"=>$this->sorgu,
                "etkilenenSatir"=>mysql_affected_rows(),
                );
            //ilk günkü gibi
            $this->sifirla();
            //nesne olarak dönsün.
            return (object) $gecici;
        }

    }

}


Yukarıdaki sınıfı php dosyanıza kopyaladıktan sonra bir kaç şey yapıyoruz. İlk önce veritabanı bilgilerimizi tanımlıyoruz.
define("db_sunucu","localhost");
define("db_veritabani","test");
define("db_kullanici","root");
define("db_sifre","sifre");
define("db_soruncoz",true);
db_soruncoz değeri true olarak ayarlanırsa sınıf bellekten kaldırılırken bize yaptığımız sorgular eğer hata olduysa hatalar hakkında bilgi veriyor.

sınıfın kullanımı ise oldukça basit

$db=new phpdb; //sınıfımızı tanımlayalım
$db->select(array("sutun1","sutun2","sutun3")); //göstermek istediğimiz sütunlar
$db->from("deneme"); //tablomuz
$db->where(array("sutun1"=>"sutun1_degeri")); //şartlarımız
$sonuc=$db->get();

bu kod yapısı bize SELECT `sutun1`,`sutun2`,`sutun3` FROM deneme WHERE `sutun1` = 'sutun1_degeri' satırını oluşturuyor.

tabi ben bunu da yazardım diyebilirsiniz. fakat sorgularınız daima kesin olmadığında ve çeşitli sql injection hatalarından korunmak istediğinizde bu yöntemler oldukça işe yarıyor.

ayrıca farklı tanımlamalar yapmanızda mümkün. örneğin $db->select("sutun1,sutun2,sutun3") yazarakta aynı select kısmını elde edebilirsiniz. tırnaklar otomatik olarak ekleniyor.

tabi insert update delete işlemlerini de yapabiliyor.

sınıf şu an neredeyse alfa aşamasında. bir grup veri için test ettim, ama hala eksik yanları olabilir. üzerinde biraz daha çalışmam gerekiyor. Eğer merak eden olursa diğer fonksiyonlar içinde açıklama yapabilirim.

Chmod bizim işimiz.

sudusleri

Düşten yumak oldun... alıp gittin günahları...

canosayan

Alıntı yapılan: sudusleri - 18 Aralık 2010 - 12:43:27
Kesinlikle merak ediyorum.
o zaman biraz daha üzerinde çalışıp yazayım bir şeyler.
Chmod bizim işimiz.

akelek

Nesne Yönelimli çalışmanın güzelliğini gösteren bir sınıf.

enes

Ellerine sağlık, devamını bekliyorum Can.
Özgür kalabildiğimiz sürece...

canosayan

biraz uzak kaldım sınıftan ama bir miktar daha bilgi girelim.
mesela diyelimki sorgunuzu yaptınız ve $sonuc=$db->get(); noktasındasınız

$sonuc artık sizin için otomatik oluturulmuş bir nesne peki bu nesne ile neler yapabilirsiniz bakalım
$sonuc->veriDizi foreach ile tüm verileri kolayca okuyabileceğiniz bir dizi ile döner  yani array("0"=>Array("sutun1","sutun2"),"1"=>Array("sutun1","sutun2"))

$sonuc->veriObje  yine foreach ile gezilebilecek bir dizi döndürür fakat bu sefer dizi elemanları alt dizi değil birer nesnedir. mesela $sonuc[0]->sutun1

$sonuc->sorgu mysql_query ile elde edilen sonuçtur. isterseniz doğrudan mysql_fetch_assoc gibi bir fonksiyona tabi tutabilirsiniz.

$sonuc->satirSayis mysql sorgusu ile dönen verinin satır sayısını iletir

$sonuc->sutunSayisi yapılan sorgunun getirdiği sutun sayısını bildirir

$sonuc->etkilenenSatir sorgunun yaptığı etkileşim hakkında bilgi sağlar

bu kodlar ile şu şekilde bir kullanım sağlamanız çok kolay

if($sonuc->satirsayisi>0)
{
    //satır sayısı 0 dan büyük ise veri gelmiş
    echo count($sonuc->veriDizi)." kadar veri geldi";
    foreach($sonuc->veriobje as $tek)
    {
           //gelen her veri için
           echo $tek->sutun1.$tek->sutun2."<br/>";
    }

}
Chmod bizim işimiz.

fatihuzuner

Ellerine sağlık ancak gözüme birden fazla dizi çarptı.Birde sürekli dizilerle string bölmelerle uğraşmıssın.Verisi çok olan veritabanında  baya işlem süresi harcar bunlar.Ben senin yerinde olsam sınıf fonksiyonlarını azaltırım.Direk selectten gelen dizi,son eklenen satırın primary keyi,mysql_num_rows() vsvs... geri gönderirdim.Hem daha basit ve daha kullanışlı olur.Yaptıklarını kötülemiyorum ama en basitinden delete from kullanicilar where sira=1 demek için bile bir sürü if kullanmışsın.dizilere atıyorsun, iflerde kontrol ediyorsun.Çok zaman harcar bunlar.Senin classı kullanan programcı dışarıdan gelen verileri filtrelemezse sayiların intval değerini kullanmazsa yine sql injection yer.Sadece şart kısımlarındakileri in_array ile kontrol ettirmek yeterli değil.

canosayan

Alıntı yapılan: fatihuzuner - 13 Mart 2012 - 19:55:40
Ellerine sağlık ancak gözüme birden fazla dizi çarptı.Birde sürekli dizilerle string bölmelerle uğraşmıssın.Verisi çok olan veritabanında  baya işlem süresi harcar bunlar.Ben senin yerinde olsam sınıf fonksiyonlarını azaltırım.Direk selectten gelen dizi,son eklenen satırın primary keyi,mysql_num_rows() vsvs... geri gönderirdim.Hem daha basit ve daha kullanışlı olur.Yaptıklarını kötülemiyorum ama en basitinden delete from kullanicilar where sira=1 demek için bile bir sürü if kullanmışsın.dizilere atıyorsun, iflerde kontrol ediyorsun.Çok zaman harcar bunlar.Senin classı kullanan programcı dışarıdan gelen verileri filtrelemezse sayiların intval değerini kullanmazsa yine sql injection yer.Sadece şart kısımlarındakileri in_array ile kontrol ettirmek yeterli değil.

öncelikle yorum için teşekkür ederim.
Sınıfı bir süre önce bıraktım aslında. ama basit olarak şöyle söyleyeyim. Fakat bu sınıf düşündüğünüz üzere "delete from kullanicilar where sira=1" demek için kullanılmıyor. Hani o noktada zaten mysql_query kullanın.

Sınıf daha çok sqlleri duruma göre oluşturmanız gerekirse işe yarıyor. Nasıl derseniz,
örneğin select kısmındaki verileri, anlık kullanıcı isteğine göre oluşturmanız gerekebilir, yada bir satırdaki tüm sutunları değiştirmeyip sadece duruma göre güncelleyeceksinizdir.
Yada çok daha basit bir durum olarak eğer where şartlarınız kullanıcı tarafından belirlenebiliyorsa işinize yarıyor.

Kişisel olarak bu tarz durumlarda string olan sql'i oluşturmaktansa sınıfın oluşturması bana daha mantıklı geliyor. Çünkü her durum için sql virgülü tırnağı düşünmek zorunda değilim.

Sql injection noktasında zaten süper filtreleme yapmıyor. zaten temizlik işlemini veritabanı sınıfına bırakmak çokda manalı değil. Sadece tırnak değişimi gibi şeyleri kısa yoldan hallediyor.

umarım sınıfı yazarkenki asıl amacımı anlatabilmişimdir.
Chmod bizim işimiz.

fatihuzuner

@canosayan ben sadece bazı kısımlarının fazla olduğunu söyledim.Her projemde en az 2 çeist bağlantı classım vardır.Düz mysql_query bende kullanmıyorum.Ne kadar veritabanı işine giriyorsak mecbur class yazmak gerekli diye düşünüyorum.Altı üstü 2 3 kere kullanılacak sorgu için zaten class kullanmak mantıksız.Benim demek istediğim sınıfta güzel şeyler var.ama fazlalıklarda var.Bir sürü verisi olan bir databasede bu sınıfı kullandığınızda farkı anlarsınız.Ama dediğim gibi emeğimiz sonuçta,ellerinize sağlık.