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