function _query($sql,$inputarr) { if (is_array($sql)) { // is prepared sql $stmt = $sql[1]; // we try to bind to permanent array, so that OCIBindByName is persistent // and carried out once only - note that max array element size is 4000 chars if (is_array($inputarr)) { $bindpos = $sql[3]; if (isset($this->_bind[$bindpos])) { // all tied up already $bindarr = $this->_bind[$bindpos]; } else { // one statement to bind them all $bindarr = array(); foreach($inputarr as $k => $v) { $bindarr[$k] = $v; OCIBindByName($stmt,":$k",$bindarr[$k],is_string($v) && strlen($v)>4000 ? -1 : 4000); } $this->_bind[$bindpos] = $bindarr; } } } else { $stmt=OCIParse($this->_connectionID,$sql); } $this->_stmt = $stmt; if (!$stmt) return false; if (defined('ADODB_PREFETCH_ROWS')) @OCISetPrefetch($stmt,ADODB_PREFETCH_ROWS); if (is_array($inputarr)) { foreach($inputarr as $k => $v) { if (is_array($v)) { if (sizeof($v) == 2) // suggested by g.giunta@libero. OCIBindByName($stmt,":$k",$inputarr[$k][0],$v[1]); else OCIBindByName($stmt,":$k",$inputarr[$k][0],$v[1],$v[2]); if ($this->debug==99) { if (is_object($v[0])) echo "name=:$k",' len='.$v[1],' type='.$v[2],'<br>'; else echo "name=:$k",' var='.$inputarr[$k][0],' len='.$v[1],' type='.$v[2],'<br>'; } } else { $len = -1; if ($v === ' ') $len = 1; if (isset($bindarr)) { // is prepared sql, so no need to ocibindbyname again $bindarr[$k] = $v; } else { // dynamic sql, so rebind every time OCIBindByName($stmt,":$k",$inputarr[$k],$len); } } } } $this->_errorMsg = false; $this->_errorCode = false; if (OCIExecute($stmt,$this->_commit)) { //OCIInternalDebug(1); if (count($this -> _refLOBs) > 0) { foreach ($this -> _refLOBs as $key => $value) { if ($this -> _refLOBs[$key]['TYPE'] == true) { $tmp = $this -> _refLOBs[$key]['LOB'] -> load(); if ($this -> debug) { ADOConnection::outp("<b>OUT LOB</b>: LOB has been loaded. <br>"); } //$_GLOBALS[$this -> _refLOBs[$key]['VAR']] = $tmp; $this -> _refLOBs[$key]['VAR'] = $tmp; } else { $this->_refLOBs[$key]['LOB']->save($this->_refLOBs[$key]['VAR']); $this -> _refLOBs[$key]['LOB']->free(); unset($this -> _refLOBs[$key]); if ($this->debug) { ADOConnection::outp("<b>IN LOB</b>: LOB has been saved. <br>"); } } } } switch (@OCIStatementType($stmt)) { case "SELECT": return $stmt; case 'DECLARE': case "BEGIN": if (is_array($sql) && !empty($sql[4])) { $cursor = $sql[4]; if (is_resource($cursor)) { $ok = OCIExecute($cursor); return $cursor; } return $stmt; } else { if (is_resource($stmt)) { OCIFreeStatement($stmt); return true; } return $stmt; } break; default : // ociclose -- no because it could be used in a LOB? return true; } } return false; }
function _query($sql, $inputarr) { if (is_array($sql)) { // is prepared sql $stmt = $sql[1]; // we try to bind to permanent array, so that OCIBindByName is persistent // and carried out once only - note that max array element size is 4000 chars if (is_array($inputarr)) { $bindpos = $sql[3]; if (isset($this->_bind[$bindpos])) { // all tied up already $bindarr =& $this->_bind[$bindpos]; } else { // one statement to bind them all $bindarr = array(); foreach ($inputarr as $k => $v) { $bindarr[$k] = $v; OCIBindByName($stmt, ":{$k}", $bindarr[$k], 4000); } $this->_bind[$bindpos] =& $bindarr; } } } else { $stmt = @OCIParse($this->_connectionID, $sql); } $this->_stmt = $stmt; if (!$stmt) { return false; } if (defined('ADODB_PREFETCH_ROWS')) { @OCISetPrefetch($stmt, ADODB_PREFETCH_ROWS); } if (is_array($inputarr)) { foreach ($inputarr as $k => $v) { if (is_array($v)) { if (sizeof($v) == 2) { // suggested by g.giunta@libero. OCIBindByName($stmt, ":{$k}", $inputarr[$k][0], $v[1]); } else { OCIBindByName($stmt, ":{$k}", $inputarr[$k][0], $v[1], $v[2]); } } else { $len = -1; if ($v === ' ') { $len = 1; } if (isset($bindarr)) { // is prepared sql, so no need to ocibindbyname again $bindarr[$k] = $v; } else { // dynamic sql, so rebind every time OCIBindByName($stmt, ":{$k}", $inputarr[$k], $len); } } } } if (OCIExecute($stmt, $this->_commit)) { switch (@OCIStatementType($stmt)) { case "SELECT": return $stmt; case "BEGIN": if (isset($sql[4])) { // jlim $cursor = $sql[4]; // jlim OCIExecute($cursor); return $cursor; } else { return $stmt; } break; default: return true; } /* Now this could be an Update/Insert or Delete */ //if (@OCIStatementType($stmt) != 'SELECT') return true; //return $stmt; } return false; }
function _query($sql, $inputarr) { if (is_array($sql)) { // is prepared sql $stmt = $sql[1]; // we try to bind to permanent array, so that OCIBindByName is persistent // and carried out once only - note that max array element size is 4000 chars if (is_array($inputarr)) { $bindpos = $sql[3]; if (isset($this->_bind[$bindpos])) { // all tied up already $bindarr =& $this->_bind[$bindpos]; } else { // one statement to bind them all $bindarr = array(); foreach ($inputarr as $k => $v) { $bindarr[$k] = $v; OCIBindByName($stmt, ":{$k}", $bindarr[$k], 4000); } $this->_bind[$bindpos] =& $bindarr; } } } else { $stmt = OCIParse($this->_connectionID, $sql); } $this->_stmt = $stmt; if (!$stmt) { return false; } if (defined('ADODB_PREFETCH_ROWS')) { @OCISetPrefetch($stmt, ADODB_PREFETCH_ROWS); } if (is_array($inputarr)) { foreach ($inputarr as $k => $v) { if (is_array($v)) { if (sizeof($v) == 2) { // suggested by g.giunta@libero. OCIBindByName($stmt, ":{$k}", $inputarr[$k][0], $v[1]); } else { OCIBindByName($stmt, ":{$k}", $inputarr[$k][0], $v[1], $v[2]); } if ($this->debug == 99) { echo "name=:{$k}", ' var=' . $inputarr[$k][0], ' len=' . $v[1], ' type=' . $v[2], '<br>'; } } else { $len = -1; if ($v === ' ') { $len = 1; } if (isset($bindarr)) { // is prepared sql, so no need to ocibindbyname again $bindarr[$k] = $v; } else { // dynamic sql, so rebind every time OCIBindByName($stmt, ":{$k}", $inputarr[$k], $len); } } } } $this->_errorMsg = false; $this->_errorCode = false; if (OCIExecute($stmt, $this->_commit)) { switch (@OCIStatementType($stmt)) { case "SELECT": return $stmt; case "BEGIN": if (is_array($sql) && !empty($sql[4])) { $cursor = $sql[4]; if (is_resource($cursor)) { $ok = OCIExecute($cursor); return $cursor; } return $stmt; } else { if (is_resource($stmt)) { OCIFreeStatement($stmt); return true; } return $stmt; } break; default: // ociclose -- no because it could be used in a LOB? return true; } } return false; }
function _query($sql, $inputarr) { //if (!is_resource($sql)) $stmt = OCIParse($this->_connectionID, $sql); //else $stmt = $sql; $this->_stmt = $stmt; if (!$stmt) { return false; } if (defined('ADODB_PREFETCH_ROWS')) { @OCISetPrefetch($stmt, ADODB_PREFETCH_ROWS); } if (is_array($inputarr)) { foreach ($inputarr as $k => $v) { if (is_array($v)) { OCIBindByName($stmt, ":{$k}", $inputarr[$k][0], $v[1], $v[2]); //print_r($v); } else { $len = -1; if ($inputarr[$k] === ' ') { $len = 1; } OCIBindByName($stmt, ":{$k}", $inputarr[$k], $len); //print " :$k $len "; } } } if (OCIExecute($stmt, $this->_commit)) { /* Now this could be an Update/Insert or Delete */ if (strtoupper(substr($sql, 0, 6)) !== 'SELECT') { return true; } return $stmt; } return false; }