Tieto funkcie vám umo¾nia prístup k Oracle8 a Oracle7 databázam. Pou¾ívajú Oracle8 Call-Interface (OCI8)
Toto roz¹írenie je flexibilnej¹ie ako ¹tandardné Oracle roz¹írenie. Podporuje previazanie globálnych alebo lokálnych PHP a Oracle premenných, plná podpora LOB, FILE a ROWID a umo¾òuje pou¾íva» u¾ívateµsky definované premenné.
Na pou¾ívanie tohto roz¹írenia budete potrebova» Oracle8 klientské kni¾nice.
Pred pou¾ívaním týchto funkcií sa uistite, ¾e máte korektne nastavené premenné prostredia Oracle pre Oracle u¾ívateµa, tak isto aj pre u¾ívateµa, pod ktorým be¾í vá¹ webserver. Budete potrebova» nasledujúce premenné:
Po nastavení premenných prostredia pre u¾ívateµa, pod ktorým be¾í webserver sa uistite, ¾e ste tohto u¾ívateµa (nobody, www) pridali aj do oracle skupiny(dba)).
Note: Ak vá¹ webserver nenabehne alebo padne hneï po ¹tarte Skontrolujte, èi je Apache zlinkovaný s pthread kni¾nicami:
# ldd /www/apache/bin/httpd libpthread.so.0 => /lib/libpthread.so.0 (0x4001c000) libm.so.6 => /lib/libm.so.6 (0x4002f000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x4004c000) libdl.so.2 => /lib/libdl.so.2 (0x4007a000) libc.so.6 => /lib/libc.so.6 (0x4007e000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Ak libpthread nie je na výpise, musíte prein¹talova» Apache:
# cd /usr/src/apache_1.3.xx # make clean # LIBS=-lpthread ./config.status # make # make install
Na niektorých UnixWare je kni¾nica libthread namiesto libpthread. V takom prípade musia by» PHP a Apache konfigurované pomocou EXTRA_LIBS=-lthread.
Musíte ma» PHP skompilované s voµbou --with-oci8[=DIR], kde DIR je ¹tandardne nastavená na premennú prostredia ORACLE_HOME.
Toto rozšírenie nemá žiadne konfiguračné direktívy definované v php.ini.
Konštanty uvedené nižšie sú definované týmto rozšírením a budú dostupné iba keď rozšírenie bolo buď kompilované do PHP alebo dynamicky načítané za behu (runtime).
Example#1 OCI Hints
<?php
// by sergo@bacup.ru
// Use option: OCI_DEFAULT for execute command to delay execution
OCIExecute($stmt, OCI_DEFAULT);
// for retrieve data use (after fetch):
$result = OCIResult($stmt, $n);
if (is_object ($result)) $result = $result->load();
// For INSERT or UPDATE statement use:
$sql = "insert into table (field1, field2) values (field1 = 'value',
field2 = empty_clob()) returning field2 into :field2";
OCIParse($conn, $sql);
$clob = OCINewDescriptor($conn, OCI_D_LOB);
OCIBindByName ($stmt, ":field2", &$clob, -1, OCI_B_CLOB);
OCIExecute($stmt, OCI_DEFAULT);
$clob->save ("some text");
OCICommit($conn);
?>
Mô¾ete µahko pristupova» k ulo¾eným procedúram rovnako ako keby ste k nim pristupovali z príkazového riadku.
Example#2 Using Stored Procedures
<?php
// by webmaster@remoterealty.com
$sth = OCIParse ( $dbh, "begin sp_newaddress( :address_id, '$firstname',
'$lastname', '$company', '$address1', '$address2', '$city', '$state',
'$postalcode', '$country', :error_code );end;" );
// This calls stored procedure sp_newaddress, with :address_id being an
// in/out variable and :error_code being an out variable.
// Then you do the binding:
OCIBindByName ( $sth, ":address_id", $addr_id, 10 );
OCIBindByName ( $sth, ":error_code", $errorcode, 10 );
OCIExecute ( $sth );
?>