OCILogon ()

Veritabani ile iletisime gecer baglantiyi kurar.Bu baglanti referans gosterilerek diger fonksiyonlarin calismasi saglanir.Bazi fonksiyonlarda boyle bir baglantinin halihazirda kurulu olmasi gerekliligi vardir.

OCIParse ()
Bu fonksiyon herhangi bir sorguyu,veritabani uzerinde uygulanmadan once hazirlamak icin kullanilir.

OCIBindByName ()
OCIParse () ile kullanilarak,kullanici tanimli data'nin sorgunun bir parcasi olmasi saglanir.Bir baglac olarak dusunulebilir…

OCIExecute ()
Hazirlanmis bir sorguyu veritabaninda uygulamak icin kullanilir.

OCIError ()

Herhangi bir sorgumuzda olusan hatalarimizi bilgilendirmek icin kullanilir.

OCIFetchInto ()
Veritabanindan donen sonuclari donguye sokmak icin kullanilir.

OCICommit ()

Bu fonksiyon ile veritabaninda tum yaptigimiz islemlerin kalici olarak gerceklesmesi saglanir.Yaptiginiz tum degisiklikleri veritabanina kayit eder.

OCIRollback ()
Bu fonksiyon ile veritabani bir onceki haline dondurulur.

Veritabanina Baglanmak

Veritabanina baglanti yapabilmek icin OCILogon () fonksiyonu kullanilir.Bu fonksiyon toplam uc parametre alir :

kullaniciadi

sifre

veritabani

<?

$db = " (DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA = (SID = ORCL))
)";

$iDBConn = OCILogon("scott","tiger",$db);

?>

NOT : Yukaridaki kod icerisinde dort noktayi ozellikle kendinize gore ayarlamalisiniz :

"scott" yazan yere kendi kullanici adinizi yazin.

"tiger" yazan yere kendi sifrenizi yazin.

HOST = 127.0.0.1 (Veritabaninin uzerinde calistigi makinenin IP )

SID = ORCL (Baglanilacak olan veritabaninin SID degeri,yani Veritabani ismi…)

Bu dort degeri kendi kullaniciadiniz,sifreniz,IP adresiniz Veritabani isminiz ile degistiriniz.

Simdi yukaridaki bilgiler ile veritabanina baglanti yapacak kisimi yazabiliriz.

Bazen kullanicilar boyle bir kodun ardindan mesajlari alirlar.Buna en ORACLE_HOME cevre degiskeninin sistem genelinde tanimlanmamis olmasidir.Simdi asagidaki gibi bir kod ile bu degiskenin yaratilip tum sistem programlari tarafindan (elbette 'de buna dahil) kullanilmasini saglayabilirsiniz.

<?

putenv("ORACLE_HOME=/usr/local/oracle/product/8.1.7");

?>

Tabii ki yukaridaki yolu kendi sisteminize gore oracle'i hanig klasore kurduysaniz onu girmelisiniz…

Tabloya yeni bir kayit girilmesi

Simdi de "calisanlar" tablosuna yeni kayit eklemeye calisalim :

<?
//
// Calisanlar tablosuna eklenecek veriler…
//

$strAdi = 'Serkan Hadi';

$strSoyadi = 'CEYLANI';

$strTelefon = '813.222.22.22';

$strEposta = 'serkan@turk-.com';

?>

Verileri tamamladigimiza gore bu veriyi alip veritabanina ekleyecek sorguyu olusturabiliriz :

<?

//
// Sorguyu hazirliyoruz…
//

$qsvCalisanEkle = "

INSERT INTO calisanlar
(calisan_id_no,adi_tx,sadi_tx,
telefon_tx,eposta_tx,guncel_dt,yaratma_dt)
VALUES (calisan_id_no.nextval,:adi_tx, :sadi_tx, :telefon_tx, :eposta_tx, SYSDATE, SYSDATE)";
?>

Yukarida gorulen kod icerisinde size yabanci gelebilecek tek nokta VALUES icinde kulanilan ":adi_tx" turundeki programlamadir.Burada yapilan aslinda cok basit bir referans verme islemidir.Daha onceden veriyi isleyip ardindan da burada ":adi_tx" gecen yere ornegin yerlestirilmesini saglayacagiz.(Bu konuya yazinin ilerleyen kesimlerinde deginecegiz.Simdilik ne oldugunu kafanizda canlandirmakla yetinin…Ingilizcede bu notasyona yapilan isleme "placeholder" denilmektedir.Oraya gelecek kullanici-tanimli veriyi isledikten sonra oraya yazmak icin kullanilmaktadir.)

calisan_id_no.nextval notasyonu ile tabloda o alanda kayitli degerden sonra (SEQUENCE komutunda belirtilen arttirma sayisi kadar yani INCREMENT BY olarak verilen deger kadar) gelecek deger yaziliyor.

SYSDATE ile alanina sistem tarihi yaziliyor.Burada herhangi bir "placeholder" kullanmadim cunku oraya yazilan veri direkt sistemden geliyor benim bir kontrol yapmama bu nedenle gerek yok.

Sorguyu tamamladigimiza gore OCIParse () fonksiyonu ile "uygulama islemine hazirlanmasini" saglayabiliriz :

<?

$iSorguIfadesi = @OCIParse($iDBConn, $qsvCalisanEkle);

?>

OCIParse () fonksiyonu bir "sorgu tanimlayicisi" yani ingilizcesi "statement identifier" olarak ifade edilen bir sonuc dondurur.Biz bu sonucu asagidaki gibi inceleyip sorgunun veritabani uzerinde uygulanmasina veya OCIRollback () fonksiyonu ile veritabaninin ilk haline dondurulmesine verebiliriz.Kisaca anlatilmak istenen, sorgunun icinde bir olup olmadigini sorgu ile ilgili veritabanindan donen sonucu asagidaki gibi irdeleyebiliyoruz :

<?

//
// SQL Ifadesi gecerli mi?
//

$arrError = OCIError($iSorguIfadesi);

if ($arrError['code'])

{
print $arrError['message'];

OCIRollback($iDBConn);

exit;
}

?>

ONEMLI : Burada deginilmesi gereken en onemli nokta OCIRollback () fonksiyonu ile veritabani ilk haline getirilse de INCREMENT BY ifadesi ile olarak arttirilan tablo alanina sorgu sirasinda atanan deger asla geriye donderilmez.Yani tabloda o alanda 3 degeri varken sizin sorgunuzdan sonra o alana olarak 4 atanmis ise OCIRollback () ile geriye dondugunuzde o alan icin tekrar sorgulama yaparsaniz bu sefer size ornegin 5 degerinin atandigini goreceksiniz…

Simdi referans olarak verdigimiz alanlara gelecek verileri olusturalim.Bu islemi OCIBindByName () fonksiyonu ile yapiyoruz :

<?

//
//Referans olarak verilen yerler icin verileri olustur.
//

@OCIBindByName($iSorguIfadesi, ':calisan_id_no', &$iCalisanNo, 4);

@OCIBindByName($iSorguIfadesi, ':adi_tx', &$strAdi, 64);

@OCIBindByName($iSorguIfadesi, ':sadi_tx', &$strSoyadi, 64);

@OCIBindByName($iSorguIfadesi, ':telefon_tx', &$strTelefon, 14);

@OCIBindByName($iSorguIfadesi, ':eposta_tx', &$strEposta, 255);

?>

Burada iki onemli noktaya deginilmesi gerekiyor.Birincisi bu yontem ile fazladan addslashes () kullanimina gerek kalmiyor (verinin icindeki tirnak isaretleri benzeri zararli datayi elimine etmek icin kullanilan fonksiyon), ikincisi ise eger islenen veri "bos" degere sahipse onu NULL olarak veritabanina yazabilmesidir…

En son olarak OCIExecute () fonksiyonu ile sorgunun veritabani uzerinde uygulanmasini sagliyoruz.(Tabii ki yukarida gorulen sekilde butun degiskenler referans edildikleri yere baglandiktan sonra)

Fonksiyonun kullaniminda onemli olan nokta OCI_DEFAULT parametresi ile Oracle'a auto-commit,yani sorgu basarili sekilde uygulanirsa olarak degisiklikleri kaydetmesi ozelliginin kapatilmasinin soylenmesidir.Her ne kadar yararli gibi gorunsede bazen coklu tablolar uzerinde yapilan UPDATE islemlerinde bu ozelligin kapatilmasi verinin zarar gormesini onleyecektir.Eger sorgu basarili sekilde uygulanirsa OCICommit () fonksiyonunu cagirarak sorgunun sonuclarinin veritabani uzerinde kayit edilmesini saglayabilecegiz…

<?

//
// Sorguyu veritabani uzerinde uygula….
//

@OCIExecute($iSorguIfadesi, OCI_DEFAULT);

// olusmadigindan emin olalim…

$arrError = OCIError($iSorguIfadesi);

if ($arrError['code'])
{

print $arrError['message'];

OCIRollback($iDBConn);

exit;

}

OCICommit($iDBConn);

?>

Veritabanindan Verileri Dondurup Formatinda Goruntulemek

Yukarida anlatilan sekilde oldugu gibi veritabanindan veri dondururkende ayni siralama izlenir.Once sorgu hazirlanir,ardindan bu sorgu denetlenir,eger bulunmaz ise veritabani uzerinde uygulanir,uygulama islemi sorunsuz olarak tamamlanirsa degisiklikler veritabanina kayit edilir…

SELECT sorgularinin yapisi geregi herhangi bir sekilde veritabanindaki veri bir sekilde degisiklikge ugramaz.Yanlizca veri istenilen sekil format istegi yapan cihaz, vb. araclara dondurulur.

Boylece yukarida anlatilan adimlardan OCIBindByName (), OCIRollback (), OCICommit () fonksiyonlarinin kullanildigi bolumlerin uygulanmasina gerek kalmaz.

<?
//
// Veriyi dondurmek icin sorguyu hazirlayalim…
//

$qsvCalisanGoruntule = "

SELECT calisan_id_no,
adi_tx,
sadi_tx,
telefon_tx,
eposta_tx,
FROM calisanlar
ORDER BY sadi_tx ASC,
adi_tx ASC ";

$iSorguIfadesi = @OCIParse($iDBConn, $qsvCalisanGoruntule);

@OCIExecute($iSorguIfadesi, OCI_COMMIT_ON_SUCCESS);

//
//Sorguyu kontrol et
//

$arrError = OCIError($iSorguIfadesi);

if ($arrError['code'])
{

print $arrError['message'];

exit;

}

?>

<table border="1" width="600">
<tr>

<td>ID</td>
<td>SOYADI</td>
<td>EPOSTA</td>
<td></td>

</tr>

<?

//
//Kayitlarimizi bir dongu icerisine sokup her satirda
// bir tane olacak sekilde gosterelim.
//OCI_ASSOC ile OCIFetchInto ile donen degerlerin,dizi icerisinde tablonun alan adi ile //anahtarlanmasini istiyoruz.Normalde index kullanilarak sonuclar dondurulur.
//

while (OCIFetchInto($iSorguIfadesi, &$arrCalisan, OCI_ASSOC))
{
?>

<tr>

<td><?= $arrCalisan['CALISAN_ID_NO'] ?></td>
<td><?= $arrCalisan['ADI_TX'] ?></td>
<td><?= $arrCalisan['SADI_TX'] ?></td>
<td><a href="mailto:<?= $arrCalisan['EPOSTA_TX'] ?>">
<?= $arrCalisan['EPOSTA_TX'] ?></a></td>
<td><?= $arrCalisan['TELEFON_TX'] ?></td>

</tr>

<? } ?>
</table>
</body>
</>

Evet buraya kadar olan tum aciklamalarimizda ORACLE veritabani icin tablonun yaratilmasi,verinin eklenmesi bu eklenen verinin web uzerinden goruntulenmesini inceledik…Yukaridaki mantik kod yapisi ile UPDATE,DELETE gibi sorgulari veritabaninda uyuglamak co zor olmayacaktir.

Bu makalenin size yararli olmasini dilerim…

Kontrat

Bu islemlerin cok uzun oldugunu birisinin sizin icin gerceklestirmesini istiyorsaniz, uygun fiyatlarla tum veritabani problemlerinize cozum satin alabilirsiniz.Iletisime gecemekten cekinmeyiniz…

Iletisim : serkan@turk-.com

Ornek Dosyalar

http://www.turk-.com/ornekler/ora_kayitekle.phps

http://www.turk-.com/ornekler/ora_kayitgoster.phps

NOT1 : Programin icerisinde kullanilan "@" isaretleri olasi mesajlarinin ekrana yazilmasini onlemek icin kullanilmistir.
NOT2 : Kendi programlarinizda kullanidiginiz "kullaniciadi" "sifre" degerlerini ayri bir dosyada saklayip,o turdeki dosyalarin kullaniciya goruntulenmesini engelleyerek guvenligi arttirabilirsiniz…

kaynak: ordan burdan

Tags: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
Php - Php”nin Oracle Fonksiyonlari (scripti, nasıl, nedir?) konusu
Benzer yazılar:
    Benzer yazı yok