OCILogon ()
Veritabani ile iletisime gecer ve 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
<?php
$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 adresi)
SID = ORCL (Baglanilacak olan veritabaninin SID degeri,yani Veritabani ismi…)
Bu dort degeri kendi kullaniciadiniz,sifreniz,IP adresiniz ve Veritabani isminiz ile degistiriniz.
Simdi yukaridaki bilgiler ile veritabanina baglanti yapacak kisimi yazabiliriz.
Bazen kullanicilar boyle bir kodun ardindan hata mesajlari alirlar.Buna en temel neden ORACLE_HOME cevre degiskeninin sistem genelinde tanimlanmamis olmasidir.Simdi asagidaki gibi bir kod ile bu degiskenin yaratilip tum sistem programlari tarafindan (elbette PHP'de buna dahil) kullanilmasini saglayabilirsiniz.
<?php
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 :
<?php
//
// Calisanlar tablosuna eklenecek veriler…
//
$strAdi = 'Serkan Hadi';
$strSoyadi = 'CEYLANI';
$strTelefon = '813.222.22.22';
$strEposta = 'serkan@turk-php.com';
?>
Verileri tamamladigimiza gore bu veriyi alip veritabanina ekleyecek sorguyu olusturabiliriz :
<?php
//
// 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 ve 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 tarih alanina sistem tarihi yaziliyor.Burada herhangi bir "placeholder" kullanmadim cunku oraya yazilan veri direkt sistemden geliyor ve benim bir kontrol yapmama bu nedenle gerek yok.
Sorguyu tamamladigimiza gore OCIParse () fonksiyonu ile "uygulama islemine hazirlanmasini" saglayabiliriz :
<?php
$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 karar verebiliriz.Kisaca anlatilmak istenen, sorgunun icinde bir hata olup olmadigini ve sorgu ile ilgili veritabanindan donen sonucu asagidaki gibi irdeleyebiliyoruz :
<?php
//
// 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 otomatik olarak arttirilan tablo alanina sorgu sirasinda atanan deger asla geriye donderilmez.Yani tabloda o alanda 3 degeri varken sizin sorgunuzdan sonra o alana otomatik 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 :
<?php
//
//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 ve 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 otomatik 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…
<?php
//
// Sorguyu veritabani uzerinde uygula….
//
@OCIExecute($iSorguIfadesi, OCI_DEFAULT);
//Hata olusmadigindan emin olalim…
$arrError = OCIError($iSorguIfadesi);
if ($arrError['code'])
{
print $arrError['message'];
OCIRollback($iDBConn);
exit;
}
OCICommit($iDBConn);
?>
Veritabanindan Verileri Dondurup HTML Formatinda Goruntulemek
Yukarida anlatilan sekilde oldugu gibi veritabanindan veri dondururkende ayni siralama izlenir.Once sorgu hazirlanir,ardindan bu sorgu denetlenir,eger hata 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 ve format istegi yapan cihaz,program vb. araclara dondurulur.
Boylece yukarida anlatilan adimlardan OCIBindByName (), OCIRollback (), ve OCICommit () fonksiyonlarinin kullanildigi bolumlerin uygulanmasina gerek kalmaz.
<?php
//
// 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>TELEFON</td>
</tr>
<?php
//
//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>
</html>
Evet buraya kadar olan tum aciklamalarimizda ORACLE veritabani icin tablonun yaratilmasi,verinin eklenmesi ve bu eklenen verinin web uzerinden goruntulenmesini inceledik…Yukaridaki mantik ve kod yapisi ile UPDATE,DELETE gibi sorgulari veritabaninda uyuglamak co zor olmayacaktir.
Bu makalenin size yararli olmasini dilerim…
Kontrat
Bu islemlerin cok uzun oldugunu ve birisinin sizin icin gerceklestirmesini istiyorsaniz, uygun fiyatlarla tum veritabani problemlerinize cozum satin alabilirsiniz.Iletisime gecemekten cekinmeyiniz…
Iletisim Adresi : serkan@turk-php.com
Ornek Dosyalar
http://www.turk-php.com/ornekler/ora_kayitekle.phps
http://www.turk-php.com/ornekler/ora_kayitgoster.phps
NOT1 : Programin icerisinde kullanilan "@" isaretleri olasi hata mesajlarinin ekrana yazilmasini onlemek icin kullanilmistir.
NOT2 : Kendi programlarinizda kullanidiginiz "kullaniciadi" ve "sifre" degerlerini ayri bir dosyada saklayip,o turdeki dosyalarin kullaniciya goruntulenmesini engelleyerek guvenligi arttirabilirsiniz…
kaynak: ordan burdan
Tags: 12, Adresi, cem, din, ekleme, ekran, etme, form, hali, hata, html, ince, izle, kar, karar, kaydetme, kur, mail, nasıl, neden, nedir, otomatik, para, php, program, rar, scripti, Scriptler, tarih, telefon, temel, ve, YabanPhp - Php”nin Oracle Fonksiyonlari (scripti, nasıl, nedir?) konusu
Benzer yazılar:
- Benzer yazı yok