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