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-programlamaReceived on Thu 04 Dec 2008 - 09:54:22 EET