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 <[EMAIL PROTECTED]>:
> 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 <[EMAIL PROTECTED]>:
>> 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
>> <[EMAIL PROTECTED]> 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
>>> [EMAIL PROTECTED]
>>>
>>> _______________________________________________
>>> Linux-programlama mailing list
>>> [email protected]
>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>
>>
>> _______________________________________________
>> Linux-programlama mailing list
>> [email protected]
>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>
>>
> _______________________________________________
> Linux-programlama mailing list
> [email protected]
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>



-- 
Elvin Şiriyev
http://siriyev.net
_______________________________________________
Linux-programlama mailing list
[email protected]
http://liste.linux.org.tr/mailman/listinfo/linux-programlama

Cevap