Stored procedure tanım olarak; veritabanında saklı bulunan bildirimsel SQL kodlarının daha sonra bir program, tetikleyici ya da bir başka saklı yordam tarafından katalog olarak çağırılmasını kolaylaştıran bir yapıdır.
Stored Procedure recursive ve kendi kendini çağıran bir yordamdır. Hemen her RDMBS(Relational database management system) recursive stored procedure destekler.Fakat veriyona bağlı olarak MySQL desteklemiyor olabilir. Recursive stored procedure kullanmak için MySQL versiyonunuzu kontrol etmek, yükseltmek zorunda kalabilirsiniz.
MySQL'de Stored Procedure
MySQL topluluklar, kuruluş ve şirketler ve web yazılımcıları tarafından yaygın olarak kullanılan bir veritabanı çözümüdür. Fakat ilk versiyonları itibariyle Stored Procedure, trigger gibi özellikleri desteklememektedir. MySQL 5.0 sürümünden bu yana, veritabanı motoruna esneklik ve güçlülük katacak bu özellikleri açık kaynak kodlu yapısına eklenmiştir. Yani stored procedure ile ilgili örnekler üzerinde çalışacak, yazılımınızda destekleyici olarak kullanacaksanız MySQL 5.0+ bir sürümün kurulu olduğundan emin olmalıyız.
Stored Procedure Avantajları
Saklı yordam uygulamalarınızın performansını arttırır.
Oluşturulduktan sonra, saklı yordam veritabanının sorguya bağlı sonuçlarını derlenmiş olarak saklar. Bu sayede sonuçlar derlenmemiş SQL sorgularından daha hızlı bir şekilde çekilebilir.
Saklı yordam sayesinde uygulama ve veritabanı sunucusu arasında trafik yoğunluğu da azalır. Birden çok derlenmemiş SQL komutunun çağırılması yerine, saklı yordam ile derlenmiş sonuçların geri çağırılması sağlanır. Böylelikle çokca sql kodu tekrar tekrar derlenmek yerine, saklı yordamın isminin çağırılması ile zaten derlenmiş kütüphane yapısı sonuçları hızlıca elde edilebilir.
Saklı yordam yeniden kullanılabilirdir ve erişmek isteyen her dil için şeffaftır. Bu sayede programcılar ek yazılımlara, fonksiyonlara gerek duymadan MySQL saklı yordamlarına hızlıca erişebilirler.
Saklı yordam güvenlidir. Saklı yordam sayesinde tablo yetkileri haricinde, saklı yordam özel yetkilerini kullanılarak veritabanı yöneticilerinin spesifik prosedürlere erişimi sağlanabilir. Böylelikle korunan bir tablonun bir kısmı için derlenmiş bir saklı yordam, yetkiler ile kimilerine görünür kılınıp, tablonun güvenliği sabitleştirilebilir.
Bu avantajların yanında saklı yordamın aşağıdaki gibi bazı dezavantajları da vardır.
Stored Procedures Dezavantajları
Saklı yordamlar ram ve işlemciye bağlı olarak veritabanı sunucusunda aşırı yüklenmelere sebep olabilir.
Veritabanı sunucusu için uygun tasarlanmamış, karmaşık bir iş mantığını gerçekleştirmek için hatalı olarak kullanıldığında sorun teşkil edebilir.
Saklı yordam sadece bildirimsel SQL içerir. Bu sebeple karmaşık bir iş mantığı için prosedürler yazmak Java, C++, C# tarzı uygulama katmanlarına nazaran bihayli zordur.
Diğer hemen hemen tüm RDMBS'lerde ve ayrıca MySQL'de saklı yordam için hata ayıklama yapılamıyor. Bu sorun için bazı geçici çözümler geliştirilmiş olsa da çok iyi oldukları söylenemez.
Saklı yordam yazmak tüm geliştiricilerin sahip olduğu temel yeteneklerin üzerinde bir yeteneğe ihtiyaç duyar. Karmaşık süreçler için fazlasıyla karmaşık yapıda prosedürler oluşturmak içi konu hakkında fazla bilgiye sahip olmak ve temel prosedürleri iyi bilmek gerekir.
Saklı yordamın yukarıda belirtildiği gibi avantajları ve dezavantajları vardır. Bu nedenle uygulama geliştirirken, saklı yordam kullanıp kullanmama konusunda bir denge sağlamak gerekir. Daha sonra bu konu ile ilgili pratik örneklere değinmeye çalışacağım.
Kolay gelsin,

Bu makalemde sizlere en basitinden hesap makinesinin nasıl yapılacağını ve çalışma mantığınız anlatacağım. En başta formunuza 1 adet Commandbutton, 3 adet Textbox ve 1 adet Label ekleyin.
- Formdaki Textboxların, Commandbuttonun ve Labelin ebatlarını ve yerlerini siz belirleyin. Sizin tasarım ve zevkinize göre bırakıyorum ki ilerde tasarım işinde hem pratik hemde kaliteli tasarımlar hazırlayabilesiniz.
- Label nesnesinin Caption yani başlık bölümüne çıkarma işlemi yaptıracaksanız "-", toplama işlemi yaptıracaksanız "+", bölme işlemi yaptıracaksanız "/", çarpma işlemi yaptıracaksanız "*" yazınız. Buttonun Caption bölümüne ise toplama işlemi yaptıracaksanız "Topla", çıkarma işlemi yaptıracaksanız "Çıkar", bölme işlemi yaptıracaksanız "Böl", çarpma işlemi yaptıracaksanız "Çarp" yazınız.
- Textbox nesnelerinin içindeki yazıları silmek için Textbox'un "Text" ayarındaki değer, metni silin veya ne yazmak istiyorsanız oraya yazın. Textbox metin nesnelerine hem metin hemde sayı yazılabilir. Dikkat edelim. Text1 metin kutucuğu toplanan, çıkarılan, bölünen veya çarpılan sayının, değerin girileceği kutucuktur.Text2 kutucuğu toplayan, çıkaran, bölen veya çarpan sayının, değerin girileceği kutucuktur. Text3 metin kutucuğu ise işlemin sonucunun yazılacağı kutucuktur.
- Yukarıdaki işlemleri uyguladıktan ve tasarım işinide bitirdikten sonra kodlamaya geçiyoruz. Kodlamayı sadece Command1 nesnesinin Click olayına yapacağız.
Private Sub Command1_Click() Text3.Text = (Text1.Text) +-/* (Text2.Text) End Sub
- Yukarıdaki kodda "+-/*" yerine hangi işlemi yapacaksanız onun sembolunu girmeniz gerekmektedir.
- "Text3.Text =" bölümü Text3 kutucuğunun metninin, değerinin ne olduğunu belirlemek için kullandık. Kısacası Text3 kutucuğuna buttona basıldığında hangi değerin atanacağını belirledik. Örneğin "Text3.Text = a" dersek buttona tıkladığımızda Text3 kutucuğuna a yazılacaktır.
- Bazı işlemleri parantez içine almamızın sebebi ise gruplandırma yapmaktır. Hem inceleyen kişi için daha rahat olacaktır. Ayrıca kod karmaşasınıda bir nebze olsun önleyeceksiniz.
- Bu kodda text3 kutucuğunun değeri text1 kutucuğu ile text2 kutucuğu arasında yapılacak işlemin sonucudur.
- Projeyi çalıştırın ve bazı sayısal değerler girip işlemi deneyin. Daha sonra text1, text2 ve text3 kutucuklarını tamamen boşaltın. Yani kutucuğa tıklayın tüm değerleri delete, backspace ve mouse ile hepsini sçerek silin. Command1 buttonuna yani tuşumuza tıklayın. Hata alacaksınız. Bunun nedenine biraz sonra geleceğim. Hataya tamam deyip kapatın. Ama projeniz hala aktif sadece duraklatıldı. İkinci toolbardan projenizi durdurun.
- Bu hata ne toplanan, çıkarılan, bölünen, çarpılan, nede toplayan, çıkaran, bölen, çarpan sayılarının yani text1 ve text2 kutucuklarının içerisinde değerler olmadığı için çıktı. Bunu gidermek için aşağıdaki kodu kullanın.
Private Sub Command1_Click() If Text1.Text = "" Or Text2.Text = "" Then Else Text3.Text = (Text1.Text) +-/* (Text2.Text) End If End Sub
- Yukarıda If...Else...End If kalıbını kullandık. If "Eğer" anlamındadır. Eğer Text1.Text boş veya Text2.Text boş ise, Else'den önce birşey yazmadığımızdan hiçbirşey yapmayacak ama siz mesaj kutusu çıkarttırabilirsiniz. Else'den sonra yani değilse dediğiniz işlemleri yapacaktır.
- Şimdi projeyi bu kodları yazdıktan sonra tekrar çalıştırdığınızda hiçbir hata almayacaksınız. Tüm olay bunlardan ibaret. Şimdi birde mesaj kutusu çıkartalım kullanıcıyı uyarmak ve yol göstermek için.
Private Sub Command1_Click() If Text1.Text = "" Or Text2.Text = "" Then MsgBox "Lütfen sayıları giriniz" Else Text3.Text = (Text1.Text) +-/* (Text2.Text) End If End Sub
- Yukarıdaki kodda Else'den önce yani Text1 veya Text2 kutucuğu boş ise mesaj kutusu çıkaracak ve içeriğinde "Lütfen sayıları giriniz" yazacaktır. Böylece kullanıcıya yol göstermiş olacağız.
Başka bir örneğimiz veya makalemizde görüşmek üzere.
(Makale 2010 yılında tarafımdan hazırlanmıştır).

Visual Basic dilinin gerek temellerini vererek gerekse nesnelerin ne işe yaradığını belirterek kafanızda bir altyapı oluşturmayı amaçladım. Bu bilgiler doğrultusunda basitten başlayarak birkaç örnek yapacağız. Sandığınızdan kolay ve zevkli olduğunu anlayacak ve bana hak vereceksiniz.
İlk olarak Commandbutton nesnesini yani button kullanacağız. Formu kendinize göre yükseklik, en, genişlik gibi özellikleri belirlemekte özgürsünüz. En çok zevk alacağınız noktalardan biride tasarımdır.
Command tuşuna basıldığında basit bir mesaj kutusu gösterelim. Bunun için:
- Forma 1 adet ebatlarını ve yerini kendiniz belirleyeceğiniz şekilde Command (button) oluşturun. Caption bölümüne yani tuşun başlığını "Mesajın nedir ?" metnini yazın. Genelde isim olarak karıştırabilirsiniz. Bu metni "Name" ayarına değil "Caption" ayarına yazmaya dikkat edelim.
- Tuşu oluşturduk ve ebatlarını yerini belirledikten sonra forma isim verme vs. gibi işlemleri tamamen kullanıcıya yani size bırakıyorum.
- Command tuşunun "Click" olayına yani tıklandığında ne yapılmasını istediğiniz olaya bir satır kod yazacağız. Bu olay için Command yani tuşa mouse ile klasör veya dosya açar gibi çift tıklamanız yeterlidir.
- Karşınıza gelecek olan kod bölümünde en yukarıda şöyle yazması gerekir "Private Sub Command1_Click()". Arada bir satır boşluk ve ardından şu yazmalıdır "End Sub". Burada Click olayı açılırken Private Sub kullanılmış. Her veya fonksiyon tanımladıktan sonra mutlaka "End Sub" veya "End Function" vs. gibi olayınıza ve işleminize göre bir son getirmelisiniz. Zaten siz getirmesenizde otomatik olarak gelecektir.
- Private Sub ve End Sub satırları arasındaki boş yere hiçbirşey silmeden ve değiştirmeden aşağıdaki kodu yazın.
Private Sub Command1_Click() MsgBox "Ben mesaj kutucuğuyum" End Sub
- Bu kodu girdikten sonra projenizde yani Visual Basic ekranının en üstünde ikinci sırada bir toolbar vardır. Bu toolbarda play, pause, stop isimlerini karşılayan mavi resimler vardır. Projeniz çalışmadığından sadece play yani çalıştırma tuşu aktiftir. Eğer stop tuşuna basarsanız proje kapanır, pause tuşuna basarsanız projeniz duraklar.
- Play yani çalıştır tuşuna bastığınızda projeniz çalışacak ve karşınıza oluşturduğunuz form gelecektir. Formunuzda başlığını belirlediğiniz Command yani bir tuş bulunması gerekir. Bu tuşa tıklamanızı istiyorum. Tıkladığınızda başlığı "Project1" olan herhangi bir resim olmayan (information resmi, error resmi, uyarı resmi, soru resmi olmayan) bir mesaj kutucuğu çıkacak ve mesajın içeriğinde ise "Ben mesaj kutucuğuyum" metni yazacaktır.
- Bu örnekte kullandığımız msgbox, küçük yazsanızda MsgBox olarak değişecektir. Çünkü bu bir fonksiyondur. Tanımlandığı için nasıl ismi belirlenmişse siz nasıl yazarsanız yazın belirlenmiş fonksiyon ismi olarak belirecektir. Örneğin msgbox'un MsgBox olması.
- Hazır fonksiyonumuz yani msgbox fonksiyonunun basit bir halinin bulunduğu bir örnekti. Başlığını, Hangi buttonların olacağını (Evet, Hayır, İptal vb.) ve mesaj resimlerini iki satır kod yazarak gerçekleştirebilirsiniz. Bunun için değişken tanımlayacağız ve tipini, içerisine metin atayacağımız için "String" olarak belirleyecek ve değişkenimize değer atayacağız.
Private Sub Command1_Click()
Dim message As String
message = MsgBox("clairvoyant", vbOkOnly + vbCritical, "Bu bir hata resimli mesajdır")
End Sub
- Burada msgbox fonksiyonunu ayrıntılı bir şekilde kullandık. MsgBox'tan sonra parantez açtığınızda projenizde size sarı bir kutucuk yardım edecektir. Her "," kullandığınızda sağdaki açıklama koyu hale gelecektir. En başta kullandığımız "clairvoyant" mesajımızın başlığıdır. vbOkOnly komutunu sade kullanabilirdik. Bu komut mesaj kutusunda sadece Ok yani Tamam tuşunun olacağınız gösterir. Zaten ","'den sonra boşluk bıraktığınızda karşınıza projenizde bir liste açılacaktır. O listeden vbYesNo, vbOkOnly vb. seçebilirsiniz. "+" yazarak bu tuşa ek olarak mesaj kutusunda gözükecek resimi belirlemiş olduk. Bu her zaman belirlenen tuş bölümünden sonra "+" yazılarak kullanılır. burdaki komutumuz vbCritical hata mesajı gibi kırmızı bir daire içerisinde kalın bir "X" işareti yani bildiğimiz hata mesajı resmidir. "+" yazdıktan sonra boşluk bıraktığınızda karşınıza gene bir liste açılacaktır. Burdan vbInformation, vbCritical, vbExclamation, vbQuestion vb. gibi resimleri seçebilirsiniz.
- Dikkat edelim kendi yazdığımız metinleri "" (tırnak) arasına her zaman almalıyız. Eğer bit nesnedeki değer veya sayı ise kullanmamıza gerek yok.
- Projenizi önceki örnekteki gibi çalıştırınız. Tuşa tıkladığınızda resmi, mesaj kutusunun başlığını ve mesajın içeriğini ayarladığımız gibi olduğunu göreceksiniz.
- Örneğimizi daha da geliştirecek olursak, mesela iki tane Textbox oluşturalım biri mesajın başlığını diğeri de mesajın içeriğini belirleyecek. Buttona tıkladığımızda başlık olarak birinci Textbox'a girilen metni gösterecek, mesajın içeriği ise ikinci Textbox'a girilen metni gösterecek.
- Bunun için önce forma 1 adet Command (button), 2 tane de Textbox ekleyeceğiz. İsimleri şöyle olmalı Command1, Text1, Text2. İsterseniz "Name" ayarından değiştirebilirsiniz. İsmi değiştirirseniz kodlamadaki Command1, Text1 ve Text2 nesnelerinin isimlerinide değiştirmelisiniz.
Private Sub Command1_Click() Dim message As String message = MsgBox(Text1.Text, vbOkOnly + vbExclamation, Text2.Text) End Sub
- Yukarıdaki kodda başlık için text1 değerini, içerik için text2 değerini kullandık. Text1.Text kodu ise text1 yani metin kutusunun metnini kullandık. Text1.Text metin kutusunun değeri, metni anlamına geliyor. Böylece kullanıcıya imkan sundunuz. Yani mesaj başlığını ve mesaj içeriğini kullanıcı belirleyecek. Az önceki diğer örnekte ise kullanıcı sadece sizin belirlediğiniz başlıklı ve içerikli mesajı görüyordu. Aradaki fark bu.
- Sadece Text1 kullanırsak yanlış olur, proje sadece o nesneyi yani Text1 nesnesini başlık olarak koymaya kalkar ve hata olur. Dikkat edelim.
- Projeyi çalıştırdığınızda Text1 ve Text2 kutucuğuna değerler girin. Command buttonuna bastığınızda text1 metin kutucu mesaj kutusunun başlığı, text2 kutucuğu ise mesaj kutusunun içeriği olacaktır.
Diğer örneklerimizde görüşmek üzere. Kodları inceleyin ve geliştirmeye çalışın. Kendiniz de örnekler yapabilirsiniz. Püf nokta şudur; bir örnek veya proje yapacaksanız önce bu projenin mantığını çıkarın, mantığı öğrenin ve sonra projeyi kodlamaya, tasarlamaya başlayın.
(Makale 2010 yılında tarafımdan hazırlanmıştır).

Visual Basic basit ve zengin bir programlama dilidir. En başta tasarımdan başlayalım. Bu iş tamamen size kalmış. Visual Basic bu konuda sizere yardımcı olmak için sadece formunuz ile ilgili bir kısım ayarlar vermiş. Bu ayarları kullanarak birbirinden güzel formlar oluşturabilirsiniz. Kodlamadan sonra en önemli etken tasarım yani göze hitaptır.
Visual Basic formunda "Caption" ayarı formunuzun başlığının yazıldığı ayardır. Bu ayarı değiştirebilirsiniz. Yeni bir Visual Basic projesi açtığınızda otomatik olarak forma "Form1" ismi verilir. Formun ikonunu değiştirmek isterseniz "Icon" ayarından belirlediğiniz ikonu bilgisayarınızdan seçebilirsiniz. Formdaki "Backcolor" ayarı ise formun arka rengini belirleyen ayardır. İstediğiniz gibi değiştirebilirsiniz. Formdaki bir başka ayar ise "Visible" ayarıdır. Bu ayar formun projeniz çalıştığında gözüküp gözükmemesi ile ilgilidir. Eğer Visible değeri "True" ise gözükür, "False" ise formunuz gözükmez. Aynı şey nesneler içinde geçerlidir.
Yukarıda verdiğimiz ufak tefek form ayarlarından sonra kalan bölümler örneklerden de anlaşılacağı gibi orta düzey İngilizce bilen birinin bu terimlerin anlamından o ayarın ne olduğunu anlayabilmesi olanaklıdır. Visual Basic için İngilizce bilmeniz gerekmektedir ki sıkıntı çekmeyesiniz ve kodları anlayabilesiniz.
Kodlarımızda kod tasarrufu ve hız açısından önemli olan değişkenleri kullanacağız. Bütün programlarda kullanılan "Değişkenler" projemizin vazgeçilmezleri arasında. Eğer hız istiyorsanuz bunu uygulamanız şarttır.
Geçelim değişkenlerimize. Değişkenleri tanımlarken onların hangi tür bir değişken olduğunu tanımlamak mümkün. Şöyle ki eğer bir metni bir değişkene atayacaksak kullanmamız gereken "String" tipidir. Örnek olarak "Dim değişken As String" yazarsanız değişken isimli değişkeninize metin atamanız gerekir. Sayı atayacak iseniz string tipi yerine "Integer" tipini kullanmanız gerekmktedir. Örnek verecek olursak "Dim sayi as Integer". Bu örnekte sayı isimli değişkenimiz –32768 ile +32767 arasında bir sayı olmalıdır. Eğer bu sayı aralığında değil ve daha büyük ise değişkenimizin tipi "Long" olmalıdır. Long daha büyük bir aralıktaki sayılar için kullanılacak olan bir veri tipidir. Örnek verecek olursak "Dim uzun As Long". Burda kullandığımız long veri tipi +2,147,483,647 ile -2,147,483,648 değerleri arasındadır. Eğer küsüratlı bir sayı ise tam sayı değilse kullanacağımız tip "Single" olmalıdır. Örnek verecek olursak "Dim kusurat As Single". Burda kullanılan single veri tipi negatif sayılar için -3.402823E38 ile –1.401298E-45 , pozitif sayılar için 1.401298E-45 ile 3.402823E38 değerleri arasındadır. Eğer kullanacağınız değişkende en büyük veri tipini istiyorsanız "Double" tipini kullanmalısınız. Örnek verecek olursak "Dim buyuk As Double". Bu örnekte kullandığımız double veri tipi pozitif sayılar için 4.94065645841247E-324 ile 1.797693134862232E308, negatif sayılar için ise -1.797693134862232E308 ile -4.94065645841247E-324 değerleri arasındadır.
Değişkenlerimize kullanacağımız diğer bir veri tipi ise "Boolean" tipidir. Bu veri tipi diğerlerine oranla ne sayısal ne de metin içerebilir. Bu veri tipi sadece "True" yada "False" olarak cevap verir ve kendi içinde işlem yaptırılabilir. True = Doğru, False = Yanlış'tır.
Eğer bir formdan diğer formdaki nesneyi kullanmak istiyorsanız, kullanacağınız formda kodun en başına nesnenin bulunduğu formu, ardından "." koyup daha sonra kullanacağınız nesneyi ve ardından gerçekleştirmek istediğiniz işlemi yapmalısınız. Eğer kullanacağınız nesne formunuz üzerinde ise başına formun ismini yazmasınızda işleminiz gerçekleşecektir.
Nesneleri eklemek veya silmek için "Project/Components" bölümüne gelmeli, *.ocx dosya tipinde bulduğunuz ya da yazdığınız nesneler varsa "Browse" seçeneği ile ekleyebilir ve kullanmak istemediğiniz nesnelerin işaretini (tikini) kaldırabilirsiniz.
Kodlamada kullanacağınız ve zorlanabileceğiniz diğer bölüm ise Windows Apisi kullanmak ve çağırmaktır. Bu apilerin ne işe yaradığını bilmek ve ne gibi işlemler gerçekleştirdiğini bilmeniz gerekmektedir. Örnek verecek olursak "Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long" verebiliriz. Bu apileri içeren tüm kodlar her bilgisayarda çalışabilir. Ama bazı projeleriniz çalışmayabilir. Çünkü Visual Basic ile gelen nesneyi kullanmanızdan kaynaklanıyordur. Eğer o nesne dosyasını çalıştırdığınız proje ile aynı klasöre atarsanız hata almayacaksınız.
Diğer derslerde görüşmek üzere. Hızlı olarak hazırladım en ince ayrıntısına kadar girmeye uğraştım. Umarım başarılı bir makale olmuştur. Kolay gelsin.
(Makale 2010 yılında tarafımdan hazırlanmıştır).

Merhaba Sevgili TR Kodlama Üyeleri,
Bu makale ile web sayfalarınızda bulunamayan veya ulaşılamayan resimlerin yerine jQuery ile nasıl farklı resimler koyabileceğinizi gösteriyorum. Örneğin a.jpg dosyası çağırılıyor fakat bulunamıyor bu resim yerine bulunamadi.jpg dosyasını gösteriyoruz. İlgili kod aşağıdaki gibidir:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('img').error(function(){
$(this).attr('src', 'bulunamadi.jpg');
});
});
</script>
Bu kadar basit bir işlemdir arkadaşlar, kolay gelsin,

Sevgili TR Kodlama Ziyaretçileri,
Bu makalemde yoğun trafiğe sahip web sitelerinin kullanmasını tavsiye ettiğim bir php fonksiyonunu anlatacağım sizlere. Bu fonksiyon sunucuları büyük bir zahmetten kurtaracaktır. Bu vesile ile sunucularınızda çıkan sorunlarıda azaltacağından sizleri de rahatlatacaktır.
Bu fonksiyonun adı mysql_pconnect()'dir. Bu fonksiyonun kulanım şekli mysql_connect() ile aynıdır.
<?php $baglanti = mysql_pconnect($vt_sunucusu, $vt_kullanici_adi, $vt_kullanici_sifresi); ?>
Bu fonksiyonun fark açık kalmasıdır. Bildiğiniz gibi mysql_connect fonksiyonunu her yeni sayfa geçişinde kullanmak durumundayız fakat bu fonksiyonla bağlantı bir kere açılır. Yani bir kullanıcı sitenize gelir mysql_pconnect ile sunucuya bağlanılır ve kullanıcı her sayfa gezdiğinde yeni bir mysql bağlantısı açılmaz. Yani apache sayfa PHP'nizi yorumladıktan sonra mysql sunucunuz kapatılmaz. Bir sonraki sayfada da tekrar açılmaz. Kalıcı bağlantılar kalıcı olmayan bağlantılardan fazla bir özelliğe sahip değildirler.
Kalıcı bağlantılar ek bir işlevselliğe sahip değilseler bunlar neden tercih ediliyorlar, diye soranlar olabilir. Yanıtı oldukça basittir: Verimlilik. SQL sunucunuza bağlantı açmak çok masraflıysa kalıcı bağlantılar kurmak daha iyidir. Bu bedel gerçekte birçok sebebe bağlı olabileceği gibi olmayabilir de. Bu, veritabanının, HTTP sunucunun bulunduğu makinede olup olmamasından SQL sunucusunun makineye ne kadar yük bindirdiğine kadar geniş bir yelpazede değerlendirilebilir. Son değerlendirmede, eğer bu bedel yüksekse kalıcı bağlantıların büyük ölçüde yardımı olacaktır. SQL sunucuya yapılan her bağlantı isteğinde alt süreç sadece o sayfayı işleyeceği yerde, kalıcı bağlantı durumunda her alt sürecin ömrü boyunca bir bağlantı kurmasına olanak tanınır. Yani, bir kalıcı bağlantı açmış her alt sürecin kendine ait bir kalıcı bağlantısı vardır. Örneğin, SQl sunucunuza kalıcı bağlantı açan betiğiniz 20 ayrı alt süreç çalıştırıyorsa alt süreç başına bir tane olmak 20 ayrı bağlantı var demektir.
Önemli Not: Ancak şuna dikkat edin, bağlantı sayısı sınırlı bir veritabanını bu sınırın üstünde kalıcı bağlantılarla kullanıyorsanız bunun bazı götürüleri olabilir. Eğer veritabanınız aynı anda 16 bağlantılık bir sınıra sahipse ve çok meşgul bir sunucu oturumunda 17 alt evre bağlantı açmaya çalışıyorsa biri bunu başaramayacaktır. Eğer betiğinizde (sonsuz döngü gibi durumlarda) bağlantıların kapatılmasına izin vermeyen hatalar varsa, veritabanı sadece 16 bağlantı ile hızla batağa saplanacaktır.
Zaman aşımı vb. durumlarda mysql bağlantınız kapanacaktır. Bu tip durumlarda mysql_ping ile kontrol edebiliriz. Bu fonksiyon mysql bağlantısı kontrol ettiği gibi tekrar bağlanması için de çaba sarfeder. Biz bunu daha etkili kılmak için şöyle bir yol izleyeceğiz:
<?php
$vt = mysql_pconnect($sunucu, $kullanici, $sifre);
if(!mysql_ping($vt)){
$vt = mysql_pconnect($sunucu, $kullanici, $sifre);
}
/*
İşlemleriniz
*/
?>
Bu şekilde amacımıza tam olarak ulaşmış oluyoruz. Yukarıdaki notu dikkate alarak bu fonksiyonu kullanabilirsiniz. Herkese kolay gelsin,
Güncel Programlama Makaleleri by TR Kodlama © 2009 is licensed under a Creative Commons Alıntı-TicariOlmayan 3.0 Unported License.