Gökalp Kuşçu

Mezun olduuuuu :)

PHP ile MYSQL Store Procedure Çağrımı

with 4 comments

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

4 Responses to 'PHP ile MYSQL Store Procedure Çağrımı'

Subscribe to comments with RSS or TrackBack to 'PHP ile MYSQL Store Procedure Çağrımı'.

  1. bu yazıyı paylaştığınız için teşekkürler.
    Merak ettiğim , performans olarak +,- leri nelerdir.

    Can

    3 Kas 09 at

  2. umarım yakın zamanda paylaşabilirim, + ve – ler olarak olaya değinmek güzel olucaktır.

    Gökalp Kuşçu

    7 Kas 09 at

  3. store procedure => internal
    orm => external
    teknik olarak sınıflandırımsal yanlış mı olur?
    gaye olarak ikisi de bana aynı gelir.

    Can

    8 Kas 09 at

  4. neden böyle bir teknik ayrıma gittiniz onu anlamadım php deki orm mantığını tam bilmiyorum fakat javadaki gibi düşünürsem proceduru etiketleyip entitylere değer aktarmak amaç, external store derim orm internali

    Gökalp Kuşçu

    22 Kas 09 at

bir yorum yaz:

iphone java.awt.event php quiz forrest gump 1994 mysql drop table Java hanks öss 2009 soruları ve cevapları java.io metallica nothing else matters staj Kişisel Mevzu ttnet statik ip java ve oracle gökalp site güncelleme dedicated server buffer overflow Lee David Zlotoff metallica half life dedicated server buffer overflow array_combine() coding muhabbeti ttnet 8 MB java.net Items.CopyTo öss 2009 cevapları nesneye dayalı php maven goals javax.swing php quiz sonucu Macgyver 1982 transformers gökalp yazılım grubu dhcp loreena mckenitt php ile veri tabanından veri çekme çin uygur devleti soykırımı javadoc:javadoc koder muhabbet ben gökalp koca adam olmuş staj başladı oracle string path php ile tag sistemi yapımı import java.sql.* Onur metallica izle soykırım write to txt with c# tom hanks osum mave System.IO.File.WriteAllLines lider olma pardus 2009 OOP pardus php mysql takım arkadaşı Mysql php nesneye dayalı programla liderlik Onur Aktaş ttnet dhcp gump google operating system wamp No listening sockets apple hüseyin kara maven plugin LOREENA MCKENNITT - ALL SOULS NIGHT izle proje öss 2009 Transformers 2: Revenge Of The Fallen Gary Serda import oracle.jdbc.pool.OracleDataSource web tag Endeavour hüs CopyTo() php drop table Java Staj kpss php türkçe karakter Converter sunucu update forrest transformers 2 projec men javadoc:aggregate shutting down for Apache java oracle bağlantısı PHP repository php object oriented programlama pardus rc2 phpTürkçe karakter sorunu billions of pages in google No listening sockets Chrome OS Gökalp Kuşçu object destination int arrayIndex etiket metallica dinle steve string[] Cyberplatform.net kibo öss 2009 soruları OS öss site update php mysql drop table php nesne kişisel proje php parent php etiket net limitsiz tarife php ile tag uzay mekiği LOREENA MCKENNITT - ALL SOULS NIGHT dinle php interface php tr converter toyota google chrome OS ttnet tarife nothing else matters pardus download javax.swing.event google Liderliğin on emri grup Transformers 2: Yenilenlerin İntikamı php class Macgyver bilgi tag me google java oracle sorgu steve Jops statik ip php nesneye dayalı programlama google Chrome saubm.com Macgyver info C# etiket yapımı google OS forrest gump php 3 katmanlı mimari WriteAllLines() Java Enterprise java ile oracle sorgu çekme half life buffer overflow 6 oscar çin soykırımı Cyberplatform.org Shia LaBeouf php veri tabanı hlds b0f hlds buffer overflow saubm kpss 2009 yorumu yazılım donanım grubu gökalp kuşçu doğum günü jenny java.lang buffer over flow open source university java oracle connection string java.util oracle sorgu bilgisayar kulubü php türkçe karakter LOREENA MCKENNITT - ALL SOULS NIGHT oscar Endeavour uzay mekiği kpss sınavı loreena Cyberplatform linux pardus Richard Dean Anderson toyota staj b0f javafoc maven plugin string content[] dinle uygur Türkleri Macgyver javadoc PHP OOP php veri tabanı bağlantısı pardus 2009 download java.text web etiket 8 megabit Türk php ile etiket yapımı maven 2 apache kpss 2009