Database ile ilgili bir işlem yapmak istediğimizde tek yapmamız gereken sorgu göndermektir. Fakat bazen yapmak istediğimiz işlem öncesi bazı kontrol işlemleri de yapmak isteriz ve bu yüzden aynı anda birden fazla sorgu göndermek zorunda kalabiliriz. Böyle olunca site trafiği artıcak ve sitenin yavaşlamasına neden olacaktır. Bunu engellemek için stored procedure kullanmamız gerekir.
Stored Procedureler bir tür fonksiyon olup birden fazla işlemi bir sorgu ile halletmemizi sağlar. Dahası Stored Procedureler yüksek güvenlik sağlar ve sql injection tarzi saldıları da engeller.
Stored Procedure kullanabilmek için iyi derecede sql bilmek gerekir. Dahası bilmeniz gereken birşey de phpmyadmin Stored Procedure yapısını tanımamaktadır. Bu yüzden databaseinize bağlanmak ve stored procedure oluşturmak için navicat tarzı özel programlara ihtiyacınız vardır.
Basit bir örnek ile stored procedure yapısını inceliyelim.
BEGIN
SELECT * FROM tablo;
END
Basit bir stored procedure olan yukardaki örnek istediğimiz bir tablodan veri okumamızı sağlar. Stored procedure php ile çağırmak için:
Query("CALL stored_procedure_adı ()")
Gördüğünüz gibi bu kadar basit. Stored procedurelere veri göndererek de işlem yapmak mümkündür.
Üye girişi işlemini bir örnek ile göstermek gerekirse:
GIRIS(uid TEXT, pwd TEXT)
BEGIN
DECLARE check INT;
DECLARE cdate DATETIME;
SET cdate = NOW();
SELECT COUNT(*) as check FROM users WHERE userid = uid AND password = pwd;
IF check = 1 THEN
UPDATE users SET logindate = cdate WHERE userid = uid;
END IF;
SELECT check;
END
Bu stored procedure'ü açıklamak gerekirse kullanıcı adı ve şifresini stored procedure'ümüze göndermemiz gerekir. Stored procedure içinde değişken tanımlamak için DECLARE değişken adı ve değişken yapısınını belirtmemiz gerekir. Değişkenimize veri aktarmak için SET değişken adı = Değer. Diğer kızımlar bildiğimiz sql işlemleridir. Eğer kendi istediğimiz veriyi geri göndermek istiyorsak SELECT değer ile bunu gerçekleştirebiliriz.
Query("CALL GIRIS('userid','userpassword')");
Sonuç olarak 1 yada 0 değerini elde ederiz.
Dediğim gibi stored procedure kullanabilmek için iyi derece de sql bilgisi gerekir. Fakat burda farkli birşeyi daha göstermek istiyorum. Ada sayfalama için kullanılan LIMIT. Bu normal sql sorgusundan farklı olarak kullanılır.
ARAMA(srcText, page)
BEGIN
DECLARE src TEXT;
DECLARE p INT;
SET @src = srcText;
SET @p = page*10;
PREPARE result FROM "
SELECT * FROM table WHERE field LIKE '%?%' LIMIT ?,0";
EXECUTE result USING @src, @p;
END
Gördüğünüz gibi bunun için özel değişkenler tanımlamamız gerekir ve PREPARE ile sorgumuzu hazırlayıp kullanacağımız değişkenler yerine soru işareti koyarız. Daha sonra EXECUTE ile hangi soru işareti yerine hangi değişkenin kullanılacağını belirleriz.
Stored Procedure ile ilgili soru sormak icin bounmis.com adresini ziyaret ediniz.