[Linux-programlama] Re: PHP'den MySQL'i kullanmak için sınıf/class arıyorum...

---------

[Linux-programlama] Re: PHP'den MySQL'i kullanmak için sınıf/class arıyorum...

From: Elvin Åžiriyev <elvin_at_siriyev.net>
Date: Thu, 4 Dec 2008 10:49:33 +0200
Message-ID: <ded068c00812040049h5faaff03v9bcbbb9046e1bc70@mail.gmail.com>

Bu da benden, sadece INSERT, UPDATE ve SELECT destekliyor ve fazla
denenmedi. kendi sorumluluðunuzda:

<?php
abstract class Base {
        public $error;
        public $dblink;

        public function addException($index = null){
                $exceptions[0] = "Unknown Error";
                $exceptions[10] = "DB Connect Error";
                $exceptions[11] = "dblink Error";
                $exceptions[20] = "Unknown Table";
                $error[] = (is_null($index) || !isset($exceptions[$index])) ?
$exceptions[0] : $exceptions[$index];
                return true;
        }

        public function initDB(){
                global $dblink;
                if ($dblink instanceof mysqli) {
                        $this->dblink = $dblink;
                        return true;
                } else {
                        $this->addException(11);
                        return false;
                }
        }
}

class DBController extends Base {
        public $sql_insert;
        public $sql_update;
        public $sql_select;

        private $table_name;

        private $mode = 'insert';

        public function __construct($table_name, $id = null){
                $this->table_name = $table_name;
                $this->initDB();
                //$rs = $this->dblink("SELECT COLUMN_NAME AS `Field`, DATA_TYPE AS
`Type`, IS_NULLABLE AS `Null`, COLUMN_KEY AS `Key`, COLUMN_DEFAULT AS
`Default`, EXTRA AS `Extra`, COLUMN_COMMENT AS `Comment` FROM
INFORMATION_SCHEMA.COLUMNS WHERE table_name = `{$conf['db_name']}` AND
table_schema = `sozluk`");
                if ($rs = $this->dblink->query("DESC `{$this->table_name}`;")) {
                        $sql_insert_1 = "";
                        $sql_insert_2 = "";

                        $sql_update_1 = "";
                        $sql_update_2 = "";

                        $sql_select_1 = "";
                        $sql_select_2 = "";

                        while ($row = $rs->fetch_assoc()) {
                                $this->$row['Field'] = $row['Default'];

                                if ($row['Default']<>'CURRENT_TIMESTAMP' &&
$row['Extra']<>'auto_increment') {
                                        $sql_insert_1 .= ", `{$row['Field']}`";
                                        $sql_insert_2 .= ', \'{$this->'.$row['Field'].'}\'';
                                }

                                if ($row['Key']=='PRI') {
                                        $sql_update_2 .= ', `'.$row['Field'].'` = \'{$this->'.$row['Field'].'}\'';
                                } else {
                                        $sql_update_1 .= ', `'.$row['Field'].'` = \'{$this->'.$row['Field'].'}\'';
                                }

                                if (!is_null($id)) {
                                        $sql_select_1 .= ", `{$row['Field']}`";
                                        if ($row['Key']=='PRI') {
                                                $this->$row['Field'] = $id;
                                                $sql_select_2 .= ', `'.$row['Field'].'` = \'{$this->'.$row['Field'].'}\'';
                                        }
                                }
                        }
                        $rs->close();

                        $this->sql_insert = "INSERT INTO `{$this->table_name}`
(".substr($sql_insert_1, 2).") VALUES (".substr($sql_insert_2,
2).");";
                        $this->sql_update = "UPDATE `{$this->table_name}` SET
".substr($sql_update_1, 2)." WHERE ".substr($sql_update_2, 2)." ;";

                        if (!is_null($id)) {
                                $this->sql_select = "SELECT ".substr($sql_select_1, 2)." FROM
`{$this->table_name}` WHERE ".substr($sql_select_2, 2).";";
                                eval("\$this->sql_select = \"$this->sql_select\";");
                                echo $this->sql_select;
                                $rs = $this->dblink->query($this->sql_select);
                                echo $this->dblink->error;
                                if ($rs->num_rows>0) {
                                        $row = $rs->fetch_assoc();
                                        foreach ($row as $key => $value) {
                                                $this->$key = $value;
                                        }
                                        $this->mode = 'update';
                                } else {
                                        return false;
                                }
                        }
                } else {
                        $this->addException(20);
                }
        }

        public function Save(){
                $sql = $this->mode=='update' ? $this->sql_update : $this->sql_insert ;
                eval("\$sql = \"$sql\";");
                if ($this->dblink->query($sql)) {
                        if ($this->mode=='insert') {
                                $this->id = $this->dblink->insert_id;
                                return $this->id;
                        }
                } else {
                        return false;
                }
        }

        public function Search($array, $glue = 'AND'){
                $sql = "";
                foreach ($array as $key => $value) {
                        $sql .= $sql == '' ? "" : "$glue " ;
                        $sql .= " `$key` = '$value' ";
                }
                echo $sql = "SELECT `id` FROM `$this->table_name` WHERE ".$sql;
                if ($rs = $this->dblink->query($sql)){
                        if ($rs->num_rows>0) {
                                $ret = array();
                                 while ($row = $rs->fetch_row()) {
                                         $ret[] = new DBController($this->table_name, $row[0]);
                                 }
                                 $rs->close();
                                 return $ret;
                        } else {
                                return false;
                        }
                } else {
                        return false;
                }
        }
}

// KULLANIMI
<?php
INSERT
$u = new DBController('users');
$u->email = $POST['email'];
$u->password = md5($POST['pass1']);
$u->nickname = $POST['nickname'];
if ($u->Save()) {
        return true;
} else {
        $err = "Belirlenemeyen Hata. Lütfen Daha Sonra Tekrar Deneyiniz";
}
SELECT
$dbc = new DBController('users');
$sr = $dbc->Search(array('email' => $email, 'password' => md5($password));
if ($sr) {
        return self::login($sr[0]->id);
} else {
        return false;
}
UPDATE
nesne $u = new DBController('users'); gibi deðil
$u = new DBController('users', $id); olarak oluþturuluyor.
burada $id tablonun primary filed'idir ve otomatik tespit eder.

PS: bu basit bir nesne olmuþ Zend_Db beni bile aþmýþ. ;)
Ýyi günler arkadaþlar.

2008/12/4 Adem Alp YILDIZ <ademalp_at_gmail.com>:
> Merhaba,
>
> Kendi yazdýðým ve projelerimde kullandýðým sýnýfý[1] örnek alarak
> kendi sýnýfýnýzý yazabilirsiniz.
> Daha yayýnlama aþamasýna gelmediði için herhangi bir belgeye sahip
> deðil, belki de hiç açmam :-)
> Kullanýmýna örnek;
>
> $db = new phpmydb($mysqlbaglanti);
> //mysqbaglanti degiskeni mysql_connect'den dönen sonuç
> //klasik kodlamayla iç içe kullandýðým için kendi baðlantý metodunu
> yazmaya gerek görmedim.
>
> $db->eleman('alan1',$deger);//ilk parametre db alaný
> $db->eleman('alan2',$deger2);
>
> $id = $db->ekle('tablo'); //tabloya yukarýdaki degerleri ekle $id ye
> insert_id yi aktarýr
> $db->eleman_temizle();//daha önce eklenenleri temizler
>
> $db->eleman('alan3',$id);
> $db->duzenle('tablo',$id); //indexli alanýn id ile eþleþenini düzenler
> istenirse aþaðýdaki gibide kullanýlabilir
> $db->duzenle('tablo',"where id=$id");
>
> $db->sorgula('tablo','alan1,alan2','where alan1='a' order by id limit
> 3, 3'); //alan1 2 deðer yerine * kullanýlabilir ama tavsiye edilmez
> :-D
>
> while($db->getir())
> echo $db->getir_al('alan1');
>
> $db->sil('tablo',$id);//yine duzenle metodunda olduðu gibi sorgu ile
> kullanýlabilr
>
>
> [1] http://github.com/ademalp/phpmydb/tree/master/class.phpmydb.php
>
> Tam olarak projenin bitmediðini hatýrlatmak isterim kullanýrsan da
> sorumluluk tamamen sana ait. hatta buraya yüklediðim sürüm
> çalýþmayabilir de :-)
>
> Umarým bir fikir verebilmiþtir.
>
> Ýyi Çalýþmalar
> A.
>
> 2008/12/4 Nuri AKMAN <nuriakman_at_gmail.com>:
>> Merhaba,
>>
>> Bu mesaj zinciri neticesince sizlerden çok deðerli bilgiler edindim. Bunun
>> için sizlere çok çok teþekkür ederim.
>>
>> "cayhane::bana_iki_cay_doldur()" satýrýndan yola çýkarak yaptýðýnýz açýklama
>> tek kelimeyle "muhteþem" olmuþ.
>>
>> Böylesi güzel cavap mesajlarý beni nasýl mutlu ediyor anlatamam...
>>
>> Tekrar teþekkür ederim... Saðolun, Varolun !
>>
>>
>> 04 Aralýk 2008 Perþembe 09:38 tarihinde Omer Barlas
>> <omer_at_serbestcagrisim.com> yazdý:
>>>
>>> Atif CEYLAN @ 04-12-2008 01:47:
>>> > <?php
>>> > $cayci = new cayhane;
>>> > $cayci->bana_iki_cay_doldur();
>>> > .....
>>> > ?>
>>>
>>> her seferinde cayhane'yi tekrar yaratmaya gerek yok;
>>> cayhane::bana_iki_cay_doldur()
>>> eðer çayhane her yaratýldýðýnda çay demleme iþlemini yapmýyorsa ayný
>>> etkiyi
>>> yapacaktýr, ama tabi php sonuç itibari ile bir 'script' dili olduðu için
>>> ve
>>> java gibi kullanýldýðý sürece hafýzada kalmamasýndan sebep her 'bana iki
>>> çay' diye seslendiðinizde cayhane'yi baþtan yaratmak, sonra çayý demlemek,
>>> bardaða doldurmak ve isteyen kiþiye iletmek iþlerini sýrasýyla yapmak
>>> gerekiyor.
>>>
>>> gel gör ki java'da durum farklý, siz iþyerinize geldiðinizde çayhane bir
>>> kere açýlýyor ve tüm çalýþma süreci boyunca çayý hazýr ve demlenmiþ olarak
>>> tutuyor. o yüzden php6'nýn da hafýzada sabit olarak çalýþmadýðý ve bir
>>> daemon olarak kalmadýðý sürece -ki zannetmiyorum çalýþsýn, ajax bile
>>> biliyorsunuz baþka bir scripti çalýþtýrmaktan ibaret, iþlenmiþ scripte
>>> tekrar herhangi bir deðiþken ekleyemiyorsunuz- php'nin herhangi bir web
>>> script dili olmaktan öteye geçmesi zor.
>>>
>>> --
>>> Omer Barlas
>>> omer_at_serbestcagrisim.com
>>>
>>> _______________________________________________
>>> Linux-programlama mailing list
>>> Linux-programlama_at_liste.linux.org.tr
>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>
>>
>> _______________________________________________
>> Linux-programlama mailing list
>> Linux-programlama_at_liste.linux.org.tr
>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>
>>
> _______________________________________________
> Linux-programlama mailing list
> Linux-programlama_at_liste.linux.org.tr
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>

-- 
Elvin Þiriyev
http://siriyev.net
_______________________________________________
Linux-programlama mailing list
Linux-programlama_at_liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Received on Thu 04 Dec 2008 - 09:54:22 EET

---------

Bu arsiv hypermail 2.2.0 tarafindan uretilmistir.