Issues

ZF-11773: Zend_Db_Statement_Oracle: Unable to set bind data type

Issue Type: Bug Created: 2011-09-27T19:15:10.000+0000 Last Updated: 2011-09-27T19:18:18.000+0000 Status: Open Fix version(s): Reporter: Tuan Doan (leetcoder) Assignee: Ralph Schindler (ralph) Tags: - Zend_Db_Adapter_Oracle

Related issues: Attachments:

Description

Unable to set bind data type. By default, all binding are set as SQLT_CHR, therefore integer variables and other data type are being bind as char instead of the appropriate data type.

Workaround:

check for $params[$name] data type and setting the fourth 5th parameter to the correct type

if (!@oci_bind_by_name($this->_stmt, $name, $params[$name], -1,{color:red}$type{color})) { $error = true; break; }

<pre class="highlight">
    SQLT_BFILEE or OCI_B_BFILE - for BFILEs;
    SQLT_CFILEE or OCI_B_CFILEE - for CFILEs;
    SQLT_CLOB or OCI_B_CLOB - for CLOBs;
    SQLT_BLOB or OCI_B_BLOB - for BLOBs;
    SQLT_RDD or OCI_B_ROWID - for ROWIDs;
    SQLT_NTY or OCI_B_NTY - for named datatypes;
    SQLT_INT or OCI_B_INT - for integers;
    SQLT_CHR - for VARCHARs;
    SQLT_BIN or OCI_B_BIN - for RAW columns;
    SQLT_LNG - for LONG columns;
    SQLT_LBI - for LONG RAW columns;
    SQLT_RSET - for cursors created with oci_new_cursor().

Zend/Db/Statement/Oracle.php

<pre class="highlight"> 
    public function _execute(array $params = null)
    {
        $connection = $this->_adapter->getConnection();

        if (!$this->_stmt) {
            return false;
        }

        if ($params !== null) {
            if (!is_array($params)) {
                $params = array($params);
            }
            $error = false;

            foreach (array_keys($params) as $name) {
                if (!@oci_bind_by_name($this->_stmt, $name, $params[$name], -1)) {
                    $error = true;
                    break;
                }
            }

            if ($error) {
                /**
                 * @see Zend_Db_Adapter_Oracle_Exception
                 */
                require_once 'Zend/Db/Statement/Oracle/Exception.php';
                throw new Zend_Db_Statement_Oracle_Exception(oci_error($this->_stmt));
            }
        }

        $retval = @oci_execute($this->_stmt, $this->_adapter->_getExecuteMode());
        if ($retval === false) {
            /**
             * @see Zend_Db_Adapter_Oracle_Exception
             */
            require_once 'Zend/Db/Statement/Oracle/Exception.php';
            throw new Zend_Db_Statement_Oracle_Exception(oci_error($this->_stmt));
        }

        $this->_keys = Array();
        if ($field_num = oci_num_fields($this->_stmt)) {
            for ($i = 1; $i <= $field_num; $i++) {
                $name = oci_field_name($this->_stmt, $i);
                $this->_keys[] = $name;
            }
        }

        $this->_values = Array();
        if ($this->_keys) {
            $this->_values = array_fill(0, count($this->_keys), null);
        }

        return $retval;
    }

Comments

No comments to display

Have you found an issue?

See the Overview section for more details.

Copyright

© 2006-2016 by Zend, a Rogue Wave Company. Made with by awesome contributors.

This website is built using zend-expressive and it runs on PHP 7.

Contacts