There are several good books on PHP and Oracle available - search your favorite bookstore. There is also a free book from Oracle "The Underground PHP and Oracle Manual" that covers the OCI8 extension: http://otn.oracle.com/tech/php/pdf/underground-php-oracle-manual.pdf
(free registration for OTN required, IIRC). Disclaimer: I'm one of its authors.
Oracle OCI8 Functions
Table of Contents
- oci_bind_array_by_name — Binds PHP array to Oracle PL/SQL array by name
- oci_bind_by_name — Binds the PHP variable to the Oracle placeholder
- oci_cancel — Cancels reading from cursor
- oci_close — Closes Oracle connection
- OCI-Collection->append — Appends element to the collection
- OCI-Collection->assign — Assigns a value to the collection from another existing collection
- OCI-Collection->assignElem — Assigns a value to the element of the collection
- OCI-Collection->free — Frees the resources associated with the collection object
- OCI-Collection->getElem — Returns value of the element
- OCI-Collection->max — Returns the maximum number of elements in the collection
- OCI-Collection->size — Returns size of the collection
- OCI-Collection->trim — Trims elements from the end of the collection
- oci_commit — Commits outstanding statements
- oci_connect — Establishes a connection to the Oracle server
- oci_define_by_name — Uses a PHP variable for the define-step during a SELECT
- oci_error — Returns the last error found
- oci_execute — Executes a statement
- oci_fetch_all — Fetches all rows of result data into an array
- oci_fetch_array — Returns the next row from the result data as an associative or numeric array, or both
- oci_fetch_assoc — Returns the next row from the result data as an associative array
- oci_fetch_object — Returns the next row from the result data as an object
- oci_fetch_row — Returns the next row from the result data as a numeric array
- oci_fetch — Fetches the next row into result-buffer
- oci_field_is_null — Checks if the field is NULL
- oci_field_name — Returns the name of a field from the statement
- oci_field_precision — Tell the precision of a field
- oci_field_scale — Tell the scale of the field
- oci_field_size — Returns field's size
- oci_field_type_raw — Tell the raw Oracle data type of the field
- oci_field_type — Returns field's data type
- oci_free_statement — Frees all resources associated with statement or cursor
- oci_internal_debug — Enables or disables internal debug output
- OCI-Lob->append — Appends data from the large object to another large object
- OCI-Lob->close — Closes LOB descriptor
- oci_lob_copy — Copies large object
- OCI-Lob->eof — Tests for end-of-file on a large object's descriptor
- OCI-Lob->erase — Erases a specified portion of the internal LOB data
- OCI-Lob->export — Exports LOB's contents to a file
- OCI-Lob->flush — Flushes/writes buffer of the LOB to the server
- OCI-Lob->free — Frees resources associated with the LOB descriptor
- OCI-Lob->getBuffering — Returns current state of buffering for the large object
- OCI-Lob->import — Imports file data to the LOB
- oci_lob_is_equal — Compares two LOB/FILE locators for equality
- OCI-Lob->load — Returns large object's contents
- OCI-Lob->read — Reads part of the large object
- OCI-Lob->rewind — Moves the internal pointer to the beginning of the large object
- OCI-Lob->save — Saves data to the large object
- OCI-Lob->saveFile — Alias of oci_lob_import
- OCI-Lob->seek — Sets the internal pointer of the large object
- OCI-Lob->setBuffering — Changes current state of buffering for the large object
- OCI-Lob->size — Returns size of large object
- OCI-Lob->tell — Returns current position of internal pointer of large object
- OCI-Lob->truncate — Truncates large object
- OCI-Lob->write — Writes data to the large object
- OCI-Lob->writeTemporary — Writes temporary large object
- OCI-Lob->writeToFile — Alias of oci_lob_export
- oci_new_collection — Allocates new collection object
- oci_new_connect — Establishes a new connection to the Oracle server
- oci_new_cursor — Allocates and returns a new cursor (statement handle)
- oci_new_descriptor — Initializes a new empty LOB or FILE descriptor
- oci_num_fields — Returns the number of result columns in a statement
- oci_num_rows — Returns number of rows affected during statement execution
- oci_parse — Prepares Oracle statement for execution
- oci_password_change — Changes password of Oracle's user
- oci_pconnect — Connect to an Oracle database using a persistent connection
- oci_result — Returns field's value from the fetched row
- oci_rollback — Rolls back outstanding transaction
- oci_server_version — Returns server version
- oci_set_prefetch — Sets number of rows to be prefetched
- oci_statement_type — Returns the type of an OCI statement
- ocibindbyname — Alias of oci_bind_by_name
- ocicancel — Alias of oci_cancel
- ocicloselob — Alias of
- ocicollappend — Alias of
- ocicollassign — Alias of
- ocicollassignelem — Alias of
- ocicollgetelem — Alias of
- ocicollmax — Alias of
- ocicollsize — Alias of
- ocicolltrim — Alias of
- ocicolumnisnull — Alias of oci_field_is_null
- ocicolumnname — Alias of oci_field_name
- ocicolumnprecision — Alias of oci_field_precision
- ocicolumnscale — Alias of oci_field_scale
- ocicolumnsize — Alias of oci_field_size
- ocicolumntype — Alias of oci_field_type
- ocicolumntyperaw — Alias of oci_field_type_raw
- ocicommit — Alias of oci_commit
- ocidefinebyname — Alias of oci_define_by_name
- ocierror — Alias of oci_error
- ociexecute — Alias of oci_execute
- ocifetch — Alias of oci_fetch
- ocifetchinto — Fetches the next row into an array (deprecated)
- ocifetchstatement — Alias of oci_fetch_all
- ocifreecollection — Alias of
- ocifreecursor — Alias of oci_free_statement
- ocifreedesc — Alias of
- ocifreestatement — Alias of oci_free_statement
- ociinternaldebug — Alias of oci_internal_debug
- ociloadlob — Alias of
- ocilogoff — Alias of oci_close
- ocilogon — Alias of oci_connect
- ocinewcollection — Alias of oci_new_collection
- ocinewcursor — Alias of oci_new_cursor
- ocinewdescriptor — Alias of oci_new_descriptor
- ocinlogon — Alias of oci_new_connect
- ocinumcols — Alias of oci_num_fields
- ociparse — Alias of oci_parse
- ociplogon — Alias of oci_pconnect
- ociresult — Alias of oci_result
- ocirollback — Alias of oci_rollback
- ocirowcount — Alias of oci_num_rows
- ocisavelob — Alias of
- ocisavelobfile — Alias of
- ociserverversion — Alias of oci_server_version
- ocisetprefetch — Alias of oci_set_prefetch
- ocistatementtype — Alias of oci_statement_type
- ociwritelobtofile — Alias of
- ociwritetemporarylob — Alias of
OCI8
christopher dot jones at oracle dot com
17-Jun-2007 09:25
17-Jun-2007 09:25
James VL
28-Feb-2007 10:49
28-Feb-2007 10:49
re: Andrei Kubar
I was using Oracle Instant Client on Windows XP, and was getting the
PHP Startup: Unable to load dynamic library 'C:\php\ext\php_oci8.dll' - The specified module could not be found.
error at startup, even though I had done all (most?) of the PHP and Oracle setup routines.
For me it wasn't the lack of mfc*.dll files, but a simple PATH issue: in addition to defining the environment variable TNS_ADMIN, I had to include my instant client directory in my PATH.
darkstar_ae at hotmail dot com
25-Apr-2005 10:39
25-Apr-2005 10:39
When fetching associative arrays, use uppercase string indices. It appears the PHP OCI Library is less lenient with the field names returned by Oracle.
e.g.
echo $row['field1']; // This won't return anything.
as opposed to:
echo $row['FIELD1'];
edahnke at consultant dot com
08-Jan-2002 12:01
08-Jan-2002 12:01
Here's a little snipet that shows how to insert multiple clob fields. Worked for me.
$dbh = OCILogon($dst_user_name, $dst_password, $dst_db_name);
for($i = 0; $i < $src_rec_cnt; $i++) {
$query = "insert into bid (id,time,resume,experience,comments) values ('$id[$i]','$time[$i]',empty_clob(),empty_clob(),empty_clob()) returning resume,experience,comments into :resume,:experience,:comments";
$stmt = OCIParse($dbh, $query);
$clob1 = OCINewDescriptor($dbh, OCI_D_LOB);
$clob2 = OCINewDescriptor($dbh, OCI_D_LOB);
$clob3 = OCINewDescriptor($dbh, OCI_D_LOB);
OCIBindByName ($stmt, ":resume", &$clob1, -1, OCI_B_CLOB);
OCIBindByName ($stmt, ":experience", &$clob2, -1, OCI_B_CLOB);
OCIBindByName ($stmt, ":comments", &$clob3, -1, OCI_B_CLOB);
OCIExecute($stmt, OCI_DEFAULT);
@$clob1->save ($resume[$i]);
@$clob2->save ($experience[$i]);
@$clob3->save ($comments[$i]);
OCICommit($dbh);
doug at redhive dot com
19-Jul-2001 02:38
19-Jul-2001 02:38
if you feel like you have too many oracle statements clouding up your php, i came up with a function to open a connection (if necessary), parse your sql statement, and return the executed query. after you call the function, you can do whatever needs to be done. makes like so much simpler: (do whatever you want with the errors)
function execute_query($query, &$connected) {
global $ORACLE_USER, $ORACLE_PASS, $ORACLE_SID;
if(!$connected) {
$connected = @OCIPLogon($ORACLE_USER, $ORACLE_PASS, $ORACLE_SID);
if($error = OCIError()) {
die("<font color=red>ERROR!! Couldn't connect to server!</font>");
}
}
$stmt = @OCIParse($connected, $query);
if($error = OCIError($cn)) {
die("<font color=red>ERROR!! Statement syntax error!</font>");
}
@OCIExecute($stmt);
if($error = OCIError($stmt)) {
die("<font color=red>ERROR!! Could not execute statement!</font>");
}
return $stmt;
}
jasendorf at lcounty dot com
23-May-2001 03:48
23-May-2001 03:48
VERY IMPORTANT! OCIPLogon only keeps a persistent connection if you are running PHP as a module. This is particularly important to Windows users who are used to running PHP as a CGI.
junk at netburp dot com
19-Oct-2000 02:39
19-Oct-2000 02:39
Here's a clue about rowid.
Don't forget about the oracle functions:
"rowidtochar" and "chartorowid"
"select rowidtochar(rowid) as FOO from table ...."
When you want to pass the rowid in a form or link, that's
the only way to go.
