ouSQL Sınıfı

PHP ile ilgilenmeye başladığımda, veritabanı işlemleri için bir sınıf geliştirmiştim. Yalnız sonradan farkettim ki bu sınıf ile yaptığım işlemleri, sınıf olmadan da neredeyse aynı kodları yazarak yapabiliyordum. Bir süre sınıfı kullanmadan veritabanı işlemleri ile uğraştım. Geçen gün yeni bir sınıf oluşturmak için çalıştım. Amaç kodları hem anlaşılır yapmak hem de fazla kod yazmadan işlemlerin yapılabilmesini sağlamaktı. Sanırım bu amaca ulaşan bir sınıfı geliştirebilmeyi başardım. Kendi kodlarımdaki karmaşayı bir nebze olsun giderdi. Kodlar aşağıda bulunmakta. Nasıl kullanılacağı konusunda bilgi ise kodlardan sonraki kısımdadır.

 
< ?php
/*
    ouSQL
 
    ouSQL, veritabanı ile ilgili işlemlerin kolaylaştırılmasını
    sağlayan bir php sınıfıdır.
 
    Copyright (C) 2008 Ömer Ücel
    http://www.omerucel.com
 
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 3.0 of the License, or (at your option) any later version.
 
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
*/
 
class ousql{
    var $conn; // bağlantı değişkeni.
    var $result; // mysql_query fonksiyonu değişkeni.
    var $data; // Sorgu sonucunda oluşan verileri tutan değişken.
 
    /*
    Veritabanına bağlanma fonksiyonu
    */
    function connect($server,$user,$password,$database){
        $this->conn = mysql_connect($server,$user,$password);
        mysql_select_db($database,$this->conn);
    } // function connect($server,$user,$password,$database)
 
    /*
    Veritabanı bağlantısını kesme fonksiyonu
    */
    function close(){
        mysql_close($this->conn);
    } // function close()
 
    /*
    Sorgu oluşturma fonksiyonu.
    */
    function create($sql,$id=0){
        $this->result[$id] = mysql_query($sql);
    } // function create($sql,$num_rows)
 
    /*
    Sorgu sonucu oluşan verilerin alınması.
    */
    function get($id=0,$type='assoc',$type_value='both'){
        switch($type){
            case 'array':
                // MYSQL_NUM
                if ($type_value=='num'){
                    $this->data[$id] = mysql_fetch_array($this->result[$id],MYSQL_NUM);
                // MYSQL_ASSOC
                }elseif($type_value=='assoc'){
                    $this->data[$id] = mysql_fetch_array($this->result[$id],MYSQL_ASSOC);
                // else : MYSQL_BOTH
                }else{
                    $this->data[$id] = mysql_fetch_array($this->result[$id],MYSQL_BOTH);
                }
                break;
            case 'assoc':
                $this->data[$id] = mysql_fetch_assoc($this->result[$id]);
                break;
            case 'object':
                $this->data[$id] = mysql_fetch_object($this->result[$id]);
                break;
            case 'row':
                $this->data[$id] = mysql_fetch_row($this->result[$id]);
                break;
            default:
                $this->data[$id] = mysql_fetch_assoc($this->result[$id]);
                break;
        }
        return $this->data[$id];
    } // function get($id,$type,$type_value)
 
    /*
    Sorgu sonucu oluşan kayıtların sayısını geri döndürür.
    */
    function num_rows($id=0){
        return mysql_num_rows($this->result[$id]);
    } // function num_rows($id=0)
}
?>
 

Bu sınıf nasıl kullanılır ?

İlk önce sınıfı sayfamıza dahil ediyoruz.

 
include_once('class.ousql.php');
 

Ardından sınıfı bir değişkene aktarıyoruz ve veritabanımıza bağlanıyoruz.

 
// ouSQL sınıfı ousql değişkenine aktarılıyor.
$ousql = new ousql;
// Veritabanı bağlantısı sağlanıyor.
$ousql->connect('sunucu','kullanıcı','parola','veritabanı');
 

Mesela mesajlar adında bir tablomuz olsun. Biz bu tablodaki verileri sıralayacağız. Aşağıda bu senaryoya uyan kodlar bulunmaktadır.

 
// Sorgulamayı yapıyoruz.
$ousql->create('select baslik from mesajlar order by baslik asc');
// Sorgu sonucu oluşan çıktıları $row değişkenine aktarıyor ve bir döngü ile başlıkları yazdırıyoruz.
while($row = $ousql->get()){
    echo $row['baslik'].'\n';
}
 

Şimdide az önceki sorgu tablosunda kaç adet kayıt olduğu değerini öğrenelim.

 
// Sorgulamayı yapıyoruz.
$ousql->create('select baslik from mesajlar order by baslik asc');
// Kaç adet kayıt bulunduğu değerini yazdırıyoruz.
echo $ousql->num_rows();
 

Eğer iç içe döngüler içerisinde bu sınıfı kullanacaksınız burada farklı işlemler gerçekleşiyor. Bunun içinde bir örnek vereyim ve ardından farklılıkları açıklayayım. Bu örnek için mesajlar tablosu sorgusuna ek olarak, mesajlar tablosundaki baslikid değeri ile resimler tablosunda bu mesaja ait resim olup olmadığını kontrol edip varsa bu resimleri listeleyelim.

 
// Sorgulamayı yapıyoruz.
$ousql->create('select baslikid,baslik from mesajlar order by baslik asc');
// Sorgu sonucu oluşan çıktıları $row değişkenine aktarıyor ve bir döngü ile başlıkları yazdırıyoruz.
while($row = $ousql->get()){
    echo $row['baslik'].' başlığına ait resimler : \n';
 
    // Burada resimler tablosu için sorgulama yapılıyor.
    $ousql->create('select resim from resimler where mesajid='.$row['baslikid'],1);
    // Sorgu sonucu oluşan çıktıları $row2 değişkenine aktarıyor ve bir döngü ile resimlerin görüntülenmesini sağlıyoruz.
    while($row2 = $ousql->get(1)){
        echo '<img src="'.$row2['resim'].'" alt="" />';
    }
 
    echo '\n\n';
}
 

Son örnekte bulunan resimleri listeleme sorgusundaki $ousql->create() fonksiyonunda 1 değerli bir argüman bulunmaktadır. Bu argüman sorgunun numarasıdır. Normalde bu argüman olmadığı takdirde sorguların hepsi 0 numarasına sahiptir. Bu şekilde sorgulara istenilen numara verilerek iç içe döngülerde sınıf kullanılabiliyor.

Resim listelemede sorguya numara verildiği için, sorgunun bir önceki sorgu ile karışması önlenmiş olmaktadır. Ayrıca numara verilmiş sorgulardaki $ousql->get() ve $ousql->num_rows() fonksiyonları kullanımıda farklılaşmaktadır. Bir sorguya verilen numaraya x dersek get ve num_rows fonksiyonları kullanımı şu şekilde olmaktadır:

 
//...
$ousql->get(x)
//...
$ousql->num_rows(x)
//...
 

Bu sınıfı geliştirecek miyim ?
Gelişimi devam ediyor henüz başlangıç için tasarlanmış bir çekirdektir. Sadece MySQL için kullanılabiliyor. İlerde başka veritabanı yönetim sistemleri içinde kullanılabilmesini sağlamaya çalışacağım. Ama tabi bundan önce sınıfın kullanım kolaylığını/kalitesini arttırmalıyım.

Ne tür şeylerin yapılacağını birazda diğer veritabanı işlemleri için hazırlanmış sınıfları inceledikten sonra karar vereceğim ve bir yol haritası çizmeye çalışacağım. Belkide çok kullanışsız bir şey olduğundan çöpede atılabilir ancak şu an çok hoşuma gidiyor bu sınıfı kullanmak :)

Tags: ,

3 Responses to “ouSQL Sınıfı”

  1. gokhan bora Says:

    mysql_query(”select * from here”);
    kullanmak yerine neden şunu:
    $ousql->create(”select * from here”);
    kullanayım ki?
    şuanda sınıfın sınıf olmakta başka hiç bir özelliği yok.
    en azından:

    $ousql = new ousql;
    $ousql->connect(’sunucu’,'kullanıcı’,'parola’,'veritabanı’);

    yerine:

    $ousql->new ousql(’sunucu’,'kullanıcı’,'parola’,'veritabanı’);
    yapılabilirdi.

    function __construct($sunucu,$kullanıcı,$parola,$veritabanı) {
    $this->conn = mysql_connect($server,$user,$password);
    mysql_select_db($database,$this->conn);
    }

  2. Ömer Ücel Says:

    Benim kullandığım kodları kısalttı ve birazda kullanıma düzen getirdi diyebilirim. Onun haricinde ha diğer türlü kullanılmış ha böyle pek fark olmuyor.

    __construct bildiğim kadarıyla PHP 5 ile gelen bir özellik. Eski sürümleri kullananlar için bu fonksiyonu kullanmadım sınıf içerisinde.

  3. o} Ömer Ücel » PHP İle Temiz Bağlantı Üretimi Says:

    [...] fonksiyonda veritabanı işlemleri için ouSQL’i kullandığımdan, veritabanı sorgusu için gerekli bölümü siz kendinize göre [...]

Leave a Reply