|
oci_bind_by_name
Binds the PHP variable to the Oracle placeholder
(PHP 5, PECL oci8:1.1-1.2.4)
Example 1633. oci_bind_by_name() example<?php Example 1634. oci_bind_by_name() example<?php Example 1635. oci_bind_by_name() example<?php
Examples ( Source code ) » oci_bind_by_name
Related Examples ( Source code ) » oci_bind_by_name Examples ( Source code ) » Calling PL/SQL Procedures and Functions Examples ( Source code ) » Oracle Collections in PHP Examples ( Source code ) » Array Binding and PL/SQL Bulk Processing Examples ( Source code ) » Using PL/SQL Types in PHP Examples ( Source code ) » Getting Output with DBMS_OUTPUT Examples ( Source code ) » Using Large Objects in OCI8 Examples ( Source code ) » Working with BFILEs Examples ( Source code ) » Get the filename from the descriptor BFILE Examples ( Source code ) » Get the filename from the descriptor BFILE PL/SQL procedure Code Examples / Notes » oci_bind_by_name08-may-2007 09:59
This is what the old OCI_B_* constants are now called: (PHP 5.1.6 win32) OCI_B_NTY - SQLT_NTY OCI_B_BFILE - SQLT_BFILEE OCI_B_CFILEE - SQLT_CFILEE OCI_B_CLOB - SQLT_CLOB OCI_B_BLOB - SQLT_BLOB OCI_B_ROWID - SQLT_RDD OCI_B_CURSOR - SQLT_RSET OCI_B_BIN - SQLT_BIN OCI_B_INT - SQLT_INT OCI_B_NUM - SQLT_NUM chris delcamp
This is an example of returning the primary key from an insert so that you can do inserts on other tables with foreign keys based on that value. The date is just used to provied semi-unique data to be inserted. $conn = oci_connect("username", "password") $stmt = oci_parse($conn, "INSERT INTO test (test_msg) values (:data) RETURN test_id INTO :RV"); $data = date("d-M-Y H:i:s"); oci_bind_by_name($stmt, ":RV", $rv, -1, SQLT_INT); oci_bind_by_name($stmt, ":data", $data, 24); oci_execute($stmt); print $rv; tom
Referes to: Be careful that the variable argument is a reference. So, the following code does not work: foreach($some_array as $key => $value) { OCIBindByName($stmt, $key, $value); } I assume this is because the contents of $value changes, even though the reference remains the same, so all bound variables end up pointing to the last loop iteration's value. Instead use the following: foreach($some_array as $key => $value) { OCIBindByName($stmt, $key, $some_array[$key]); } This dues to the foreach statement. $some_array in foreach() is a copy of the origine array. $key would be the "reference" in the copy, but $some_array[$key] points to the original one. hfuecks
Note that there have been some changes on the constant identifiers and the documentation is currently not entirely accurate. Running the following script; <?php foreach (array_keys(get_defined_constants()) as $const) { if ( preg_match('/^OCI_B_/', $const) ) { print "$const\n"; } } ?> Under PHP 4.4.0 I get; OCI_B_SQLT_NTY < renamed to OCI_B_NTY with PHP5 OCI_B_BFILE OCI_B_CFILEE OCI_B_CLOB OCI_B_BLOB OCI_B_ROWID OCI_B_CURSOR OCI_B_BIN Under PHP 5.0.4 I get; OCI_B_NTY OCI_B_BFILE < docs are wrong right now OCI_B_CFILEE < docs are wrong right now OCI_B_CLOB OCI_B_BLOB OCI_B_ROWID OCI_B_CURSOR OCI_B_BIN < it's a mystery ehsmeng
If you do a wrapper for these functions there is a bug I found on php5.1.1 / oracle 9 / windows xp. see the section with oci_bind_by_name. function db_layer_insert_1_row ($dbquery, $bindvar = array()) { global $_db_layer_database; global $_db_layer_lasterror; if (false === ($stid = oci_parse($_db_layer_database, $dbquery))) { db_layer_lasterror (); return -1; } // Bind variables. NOTE substituting $bindvar[$bcol] with $bval causes // all variables to be set to the last value of $bval?!?! foreach ($bindvar as $bcol => $bval) { oci_bind_by_name($stid, $bcol, $bindvar[$bcol]); //$bval); <- bug?! } ... js
Be careful that the variable argument is a reference. So, the following code does not work: foreach($some_array as $key => $value) { OCIBindByName($stmt, $key, $value); } I assume this is because the contents of $value changes, even though the reference remains the same, so all bound variables end up pointing to the last loop iteration's value. Instead use the following: foreach($some_array as $key => $value) { OCIBindByName($stmt, $key, $some_array[$key]); } |
Change Languageoci_bind_array_by_name oci_bind_by_name oci_cancel oci_close OCI-Collection->append OCI-Collection->assign OCI-Collection->assignElem OCI-Collection->free OCI-Collection->getElem OCI-Collection->max OCI-Collection->size OCI-Collection->trim oci_commit oci_connect oci_define_by_name oci_error oci_execute oci_fetch_all oci_fetch_array oci_fetch_assoc oci_fetch_object oci_fetch_row oci_fetch oci_field_is_null oci_field_name oci_field_precision oci_field_scale oci_field_size oci_field_type_raw oci_field_type oci_free_statement oci_internal_debug OCI-Lob->append OCI-Lob->close oci_lob_copy OCI-Lob->eof OCI-Lob->erase OCI-Lob->export OCI-Lob->flush OCI-Lob->free OCI-Lob->getBuffering OCI-Lob->import oci_lob_is_equal OCI-Lob->load OCI-Lob->read OCI-Lob->rewind OCI-Lob->save OCI-Lob->saveFile OCI-Lob->seek OCI-Lob->setBuffering OCI-Lob->size OCI-Lob->tell OCI-Lob->truncate OCI-Lob->write OCI-Lob->writeTemporary OCI-Lob->writeToFile oci_new_collection oci_new_connect oci_new_cursor oci_new_descriptor oci_num_fields oci_num_rows oci_parse oci_password_change oci_pconnect oci_result oci_rollback oci_server_version oci_set_prefetch oci_statement_type ocibindbyname ocicancel ocicloselob ocicollappend ocicollassign ocicollassignelem ocicollgetelem ocicollmax ocicollsize ocicolltrim ocicolumnisnull ocicolumnname ocicolumnprecision ocicolumnscale ocicolumnsize ocicolumntype ocicolumntyperaw ocicommit ocidefinebyname ocierror ociexecute ocifetch ocifetchinto ocifetchstatement ocifreecollection ocifreecursor ocifreedesc ocifreestatement ociinternaldebug ociloadlob ocilogoff ocilogon ocinewcollection ocinewcursor ocinewdescriptor ocinlogon ocinumcols ociparse ociplogon ociresult ocirollback ocirowcount ocisavelob ocisavelobfile ociserverversion ocisetprefetch ocistatementtype ociwritelobtofile ociwritetemporarylob |