Bu derste, sorgularınızın daha hızlı ve daha güvenli şekilde yürütülmesini sağlamak için MySQL tarafından hazırlanmış ifadeleri kullanmayı öğreneceksiniz.
MySQL Hazırlamış İfade Kullanımı
MySQL sürüm 4.1’den önce, sorgu MySQL sunucusuna metin biçiminde gönderilir. Sırasıyla, MySQL verileri metin protokolünü kullanarak istemciye geri gönderir. MySQL’in sorguyu tamamen ayrıştırması ve istemciye döndürmeden önce sonuç kümesini bir dizgeye dönüştürmesi gerekir.
Metinsel protokolün ciddi performans etkisi vardır. Bu sorunu çözmek için, MySQL 4.1 sürümünden bu yana hazırlanan deyim adlı yeni bir özellik ekledi.
Hazırlanan ifade, istemci/ sunucu ikili protokolünden faydalanır. Aşağıdaki örnek olarak yer tutucuları (?) içeren sorguyu MySQL sunucusuna iletir:
1
2
3
4
5
SELECT *
FROM ogrenci
WHERE ogrno= ?;
MySQL bu sorguyu farklı ürün kodu değerleri ile yürüttüğünde sorguyu tam olarak ayrıştırması gerekmez. Sonuç olarak, bu MySQL’in sorguyu daha hızlı yürütmesine yardımcı olur, özellikle MySQL sorguyu birden çok kez çalıştırdığında. Hazırlanan ifade yer tutucuları (?) Kullandığından, bu birçok SQL enjeksiyon türünden kaçınmaya yardımcı olur, bu nedenle uygulamanızı daha güvenli hale getirir.
MySQL hazırlanan deyim kullanımı
MySQL tarafından hazırlanan bildirimi kullanmak için, diğer üç MySQL deyimini aşağıdaki gibi kullanmanız gerekir:
- PREPARE – Çalıştırmak üzere ifadeyi hazırlar.
- EXECUTE – PREPARE ifadesi ile hazırlanan sorgu yürütülür.
- DEALLOCATE PREPARE – Hazırlanan ifadeyi serbest bırakır.
MySQL PREPARED Statement Örneği
MySQL tarafından hazırlanan ifade kullanma örneğine bir göz atalım.
1
2
3
4
5
6
7
8
9
10
11
12
PREPARE stmt1 FROM'SELECT
ogrno,ograd,ogrsoyad,sinif
FROM
ogrenci
WHERE sinif=?';
SET @sinif = '11A';
EXECUTE stmt1 USING @sinif;
DEALLOCATE PREPARE stmt1;
İlk önce, PREPARE deyimini yürütmeye yönelik bir ifade hazırlamak için kullandık. SELECT deyimini, ogrenci tablosunu belirtilen alanları sorgulamak için kullandık. Belirtilen sınıftaki öğrencileri almak için sınıf yerine soru işreti ekledik.
Daha sonra, @sinif adında bir değişken tanımlayarak bu değişkene ’11A’ değerini ekledik.
Daha sonra, EXACUTE deyimini hazırlanan deyimi @sinif değişkeni ile stmt1 olarak hazırlanan sorguyu açlıştırdık.
Son olarak, hazırlanan ifadeyi serbest bırakmak için DEALLOCATE PREPARE kullandık.
Bu eğitim yazısında, sorgunun hızını arttırmak ve sorgunuzu daha güvenli hale getirmek için yer tutucularla bir sorgu yürütmek için MySQL prepare deyimini nasıl kullanacağınızı gösterdik.