Mysql Database Üzerinde Stored Procedure Kullanımı

Programlama Dilleri bölümünde yer alan bu konu hortLak tarafından paylaşıldı.

  1. hortLak

    hortLak c ε ή κ

    1-) Mysql de Stored Procedure Varmıdır ?
    2-) Mysql de Stored Procedure Nasıl Yapılır ?
    3-) Stored Procedur Nedir ?
    Bu örnekte yer alan kod da online kullanıcıların mysql database üzerinde stored procedure kullanımı ile kullanıcı kayıtlarını ve bilgilerini tutmak amacıyla yapılmış bir örnektir.

    PHP:
    CREATE PROCEDURE temp.online(in gip varchar(15), in gzaman int, in gtarih varchar(19), out sonuc int) 
    /*  
    Burada in ile procedure gid isimli bir değişken girişini sağlıyoruz ve türünü integer olarak atıyoruz..  
    Aynı şekilde gtarih değişkeni de string bir ifade olarak 19(YYY-MM-DD H:i:s) karakter ile sınırlayıp procedure girişini atıyoruz. 
    out ile sonuc değişkenin prosedür de yapılacak işlemlerin sonuç değerini yani çıktı değişkenini belirliyoruz ve türünü integer olarak tanımlıyoruz. 
    */ 
    BEGIN 
    DECLARE sayi INT;  
    DECLARE varmi INT; 
    DECLARE onceden_girdimi INT; 
    /* Burada ise sayi isimli değişkeni prosedürün içinde kullanacağımız değişken olarak tanımlıyoruz. Değişken türü integer dir.*/ 
    delete from temp.online where zaman < gzaman; 
    /*  
    Daha öncede kullanıcı girişi yapılmış ve zaman aşımına uğrayan kullanıcı kayıtlarını siliyoruz.  
    */ 
    set varmi = (select count(id) as var from online where ip = gip); 
    /* 
    Burada ise php içerisinde yolladığımız IP adresini prosedür içinden kullanıcının daha önceden kaydının var olup olmadığını kontrol ediyoruz. 
    ?/ 
    if varmi = " then  
    /* 
    Burada varmi değişkeninin daha önceden giriş yapıp yapmadığını kontrol ediyoruz. 
    */ 
    insert into temp.online(ip, zaman)values(gip,gzaman+180); 
    set sayi =(select count(*) as toplamkisi from temp.online); 
    set sonuc = sayi; 
    /* 
    Burada sonuc değişkenine toplam online olan kullanıcıları atıyoruz. 
    */ 
    else 
    /* 
    Eğer ki kullanıcı daha önceden giriş yapmış ise kayıt zamanını güncelliyoruz. 
    */ 
    update temp.online set zaman = gzaman+60 where ip = gip; 
    set sayi =(select count(*) as toplamkisi from temp.online); 
    set sonuc = sayi; 
    end if; 
    set onceden_girdimi = (select ip as arsiv_ip from temp.say where ip = gip);  
    /* Burada kullanıcı istatistiği tutuluyor*/ 
    if onceden_girdimi <> " then 
    update temp.say set kacdefa = kacdefa +1, songiris=gtarih where ip = gip; 
    else 
    insert into temp.say(ip, kacdefa,songiris)values(gip,1,gtarih); 
    end if; 
    END 

    Tablo bilgisi 
    ------------------------------- 
    #---------------------------- 
    # Table structure for online 
    #---------------------------- 
    CREATE TABLE `online` ( 
    `id` int(11) NOT NULL auto_increment, 
    `ip` varchar(15) default NULL, 
    `zaman` double default NULL, 
    PRIMARY KEY (`id`) 
    ); 
    #---------------------------- 
    # Records for table online 
    #---------------------------- 

    #---------------------------- 
    # Table structure for say 
    #---------------------------- 
    CREATE TABLE `say` ( 
    `id` int(11) NOT NULL auto_increment, 
    `ip` varchar(15) default NULL, 
    `kacdefa` int(11) default NULL, 
    `songiris` datetime default NULL, 
    PRIMARY KEY (`id`) 
    ); 
    #---------------------------- 
    # Records for table say 
    #---------------------------- 

    PHP içerisinden çağrılacak kod. 
    <?php 
    @mysql_connect('localhost','root',")or die("Baglantı saglamadı"); 
    @mysql_select_db('temp',
    $conn)or die("DB Bulunamadı"); 
    $server_id = $_SERVER['REMOTE_ADDR']; 
    $zaman = time(); 
    $sql = mysql_query("call online('".$server_id."','".$zaman."''".date("Y-m-d H:i:s")."',@sonuc)"); 
    $ss = mysql_query("select @sonuc"); 
    $a = mysql_fetch_array($ss); 
    if (
    $a['@sonuc']!=null) 

    echo 
    $a['@sonuc']; 


    ?>