Mysql Database Üzerinde Stored Procedure Kullanımı

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']; 
} 


?>
 

Benzer Konular

Yanıtlar
2
Görüntülenme
9B
Üst