Evet arkadaşlar store procedure lafını çok duymuşsunuzdur. En çok duyduğunuz alanda ise 3 katmanlı mimari içindedir sanırım. Veri katmanını oluşturan kısım için önemli bir yapı şimdi bunu PHP ve MYSQL veri tabanı tarafından inceleyeceğiz. Bu dökümanda fazla syntax yapısına değinmeyeceğim. Bu dökümanın kapsamında MYSQL store procedure nasıl yazılır ve PHP içinde nasıl çağrılır onu göstermeye çalışacağım.
İlk olarak şunu belirtmek istiyorum, PHP ile MYSQL yapısına bağlantıyı hemen hemen herkes bilir connect ve select_db fakat kullandığım PHP sürümünde store procedure call ederken bir bug oluşuyormuş ve bendede bu bug oluştuğu için mysqli yapısını kullanacağım, mysqli yapısı hakkında bilgi almak istiyorsanız.
http://www.php.net/manual/en/mysqli.overview.php okumanızı tavsiye ederim. Syntax bir daha OOP dayalı. Hatta belirgin özelliklerini yazmışlar bende paylaşayım.
- Object-oriented interface
- Support for Prepared Statements
- Support for Multiple Statements
- Support for Transactions
- Enhanced debugging capabilities
- Embedded server support
Şimdi gelelim store procedure yazımına, dbForge Studio kullanıyorum bunu belirtmek isterim. Bu işlemleri phpMyadmin sql sorgusu alanındada işleyebilirsiniz. Fakat ben daha olması için bu tip editörler kullanıyorum. phpMyadmin üzerinde yazıp çalıştırmaya kalktığınızda DELIMETER gibi isteklerde bulununabilir fakat benim editörüm bunu kendisi yapıyor. Herneyse;
Bu çalışma için oluşturduğum veri tabanı şu şekilde:
-- -- Tablo yapısı: `tbltest` -- CREATE TABLE IF NOT EXISTS `tbltest` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `News` text COLLATE utf8_turkish_ci, `NewsAuthor` varchar(50) COLLATE utf8_turkish_ci DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=2 ; -- -- Tablo döküm verisi `tbltest` -- INSERT INTO `tbltest` (`ID`, `News`, `NewsAuthor`) VALUES (1, 'Haber testidir.', 'gökalp');
Evet veri tabanımızı oluşturduk. Bir tablo ve 3 kolondan oluşan ID adında bir primary key taşıyan, veri tabanımızı oluşturduk ve içeri bir veri insert ettik.Şimdi gelelim procedure yazmaya. Hemen aşağıdaki kodumuzu işletelim.
CREATE DEFINER = 'root'@'localhost'
PROCEDURE workspacedb.fetchDependsOnID(IN _ID INTEGER (11))
BEGIN
SET @USING_ID = _ID;
SELECT
*
FROM
WORKSPACEDB.tbltest
WHERE
TBLTEST.ID = @USING_ID;
END
Benim database adım workspacedb ve oluşturacağım procedure adına fetchDependsOnID ( id’ye bağlı olarak getir ) koydum.
IN _ID INTEGER (11) – > İçeri alınacak değerin tipini gönderiyor bir fonksiyon gibi düşünün.
BEGIN procedure başlangıç END ise bitiş kısmı.
SET @USING_ID = _ID; -> Anlicağınız üzere IN ile içeri alınan değişken value, içerdeki procedure değişkenine atandı.Set edildi.
Sonra query ifademizi oluşturduk ve WHERE şart alanından sonra set ettiğimiz değişkeni ile şartımızı bitirdik. Temel olarak olan olay şu oldu, IN içinde gelen veri, bir int veri ve bu int değerine sahip ID’li haberi getir.
Şimdi gelelim PHP alanımıza,
< ?php
$mysqli = mysqli_init();
$mysqli->real_connect("localhost","root","","workspacedb");
if ($re = $mysqli->real_query("call fetchDependsOnID(1)"))
{
if($objResult = $mysqli->store_result())
{
while($row = $objResult->fetch_assoc())
{
$arr[]=$row;
}
//OUT:Array ( [0] => Array ( [ID] => 1 [News] => Haber testidir. [NewsAuthor] => gökalp ) )
print_r($arr);
$objResult->free_result();
}
}
?>
Gerekli syntaxlar yukarıda
Dönüş sonuçta gördüğünüz gibi :
Array ( [0] => Array ( [ID] => 1 [News] => Haber testidir. [NewsAuthor] => gökalp ) )
Burda normal mysql_query(“”); gibi, fakat sql sorgusu göndermek yerine, CALL deyimi ile kendi prodecure ümüzü çağrıyoruz ve sonucun gelmesini bekliyoruz.
İyi çalışmalar
gökalp kuşçu
Tags: mysql store procedure, php ile mysql storeprocedure, php ile store procudure, php ile store procudure çağrımı, php mysql store procedure, php store procedure
4 comments
Comments feed for this article
Trackback link: http://www.gokalpkuscu.com/php-ile-mysql-store-procedure-cagrimi/trackback