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
http://www.gokalpkuscu.com

Tags: mysql, php, procedure, store

Share 

Add a Comment

You need to be a member of Open Source University Meetup to add comments!

Join this social network


Webinars

OSUM members get exclusive access to a series of webinars on the most innovative open source technologies via the OSUM Webinar Series.

If you missed any of the previous OSUM Webinars, click here to listen to the replays of the previous sessions.

News

Download Free OpenOffice.org Guide For Creating Large Documents One of the advantages of OpenOffice.org is its ability to handle large word processing documents such as theses and research papers. Download this free guide now and read expert advice on writing with OpenOffice.org.

Get On Board with JavaFX & the Tech Train Game

Get a hands-on introduction to JavaFX when you play the Tech Test Train - Ride the train, test your knowledge of JavaFX technology, and earn points. Click HERE to play.

Working With ZFS Snapshots Download the free ZFS Snapshots How-To Guide to learn how to create and use the backup and restore capabilities of ZFS snapshots.

© 2009   Created by Gary Serda

Badge  |  Report an Issue  |  Privacy  |  Terms of Service