示例#1
0
 /**
  * Executes the statement in unbuffered mode (if possible)
  * 
  * @internal
  * 
  * @param  fUnbufferedResult $result     The object to place the result into
  * @param  array             $params     The parameters for the statement
  * @param  mixed             &$extra     A variable to place extra information needed by some database extensions
  * @param  boolean           $different  If this statement is different than the last statement run on the fDatabase instance
  * @return void
  */
 public function executeUnbufferedQuery($result, $params, &$extra, $different)
 {
     if ($different && $this->used) {
         $this->regenerateStatement();
     }
     $this->used = TRUE;
     $extension = $this->database->getExtension();
     $connection = $this->database->getConnection();
     $statement = $this->statement;
     $params = $this->prepareParams($params);
     // For the extensions that require the statement be passed to the result
     // object, we store it in a stdClass object so the result object knows
     // not to free it when done
     $statement_holder = new stdClass();
     $statement_holder->statement = NULL;
     switch ($extension) {
         case 'ibm_db2':
             $extra = $statement;
             if (db2_execute($statement, $params)) {
                 $statement_holder->statement = $statement;
             } else {
                 $result->setResult(FALSE);
             }
             break;
         case 'mssql':
             $result->setResult(mssql_query($result->getSQL(), $this->connection, 20));
             break;
         case 'mysql':
             $result->setResult(mysql_unbuffered_query($result->getSQL(), $this->connection));
             break;
         case 'mysqli':
             $extra = $this->statement;
             if ($statement->execute()) {
                 $statement_holder->statement = $statement;
             } else {
                 $result->setResult(FALSE);
             }
             break;
         case 'oci8':
             $result->setResult(oci_execute($statement, $this->database->isInsideTransaction() ? OCI_DEFAULT : OCI_COMMIT_ON_SUCCESS));
             break;
         case 'odbc':
             $extra = odbc_execute($statement, $params);
             if ($extra) {
                 odbc_longreadlen($statement, 1048576);
                 odbc_binmode($statement, ODBC_BINMODE_CONVERT);
                 $statement_holder->statement = $statement;
             } else {
                 $result->setResult($extra);
             }
             break;
         case 'pgsql':
             $result->setResult(pg_execute($connection, $this->identifier, $params));
             break;
         case 'sqlite':
             $result->setResult(sqlite_unbuffered_query($connection, $this->database->escape($statement, $params), SQLITE_ASSOC, $extra));
             break;
         case 'sqlsrv':
             $extra = sqlsrv_execute($statement);
             if ($extra) {
                 $statement_holder->statement = $statement;
             } else {
                 $result->setResult($extra);
             }
             break;
         case 'pdo':
             $extra = $statement->execute();
             if ($extra) {
                 $result->setResult($statement);
             } else {
                 $result->setResult($extra);
             }
             break;
     }
     if ($statement_holder->statement) {
         $result->setResult($statement_holder);
     }
     return $result;
 }
示例#2
0
 /**
  * Executes an unbuffered SQL query
  * 
  * @param  fUnbufferedResult $result  The result object for the query
  * @return void
  */
 private function executeUnbufferedQuery($result)
 {
     $old_level = error_reporting(error_reporting() & ~E_WARNING);
     if ($this->extension == 'mssql') {
         $result->setResult(mssql_query($result->getSQL(), $this->connection, 20));
     } elseif ($this->extension == 'mysql') {
         $result->setResult(mysql_unbuffered_query($result->getSQL(), $this->connection));
     } elseif ($this->extension == 'mysqli') {
         $result->setResult(mysqli_query($this->connection, $result->getSQL(), MYSQLI_USE_RESULT));
     } elseif ($this->extension == 'oci8') {
         $oci_statement = oci_parse($this->connection, $result->getSQL());
         $result->setResult(oci_execute($oci_statement, $this->inside_transaction ? OCI_DEFAULT : OCI_COMMIT_ON_SUCCESS) ? $oci_statement : FALSE);
     } elseif ($this->extension == 'odbc') {
         $result->setResult(odbc_exec($this->connection, $result->getSQL()));
     } elseif ($this->extension == 'pgsql') {
         $result->setResult(pg_query($this->connection, $result->getSQL()));
     } elseif ($this->extension == 'sqlite') {
         $result->setResult(sqlite_unbuffered_query($this->connection, $result->getSQL(), SQLITE_ASSOC, $sqlite_error_message));
     } elseif ($this->extension == 'sqlsrv') {
         $result->setResult(sqlsrv_query($this->connection, $result->getSQL()));
     } elseif ($this->extension == 'pdo') {
         $result->setResult($this->connection->query($result->getSQL()));
     }
     error_reporting($old_level);
     if ($this->extension == 'sqlite') {
         $this->checkForError($result, $sqlite_error_message);
     } elseif ($this->extension == 'oci8') {
         $this->checkForError($result, $oci_statement);
     } else {
         $this->checkForError($result);
     }
 }
示例#3
0
 /**
  * Executes the statement in unbuffered mode (if possible)
  * 
  * @internal
  * 
  * @param  fUnbufferedResult $result     The object to place the result into
  * @param  array             $params     The parameters for the statement
  * @param  mixed             &$extra     A variable to place extra information needed by some database extensions
  * @param  boolean           $different  If this statement is different than the last statement run on the fDatabase instance
  * @return void
  */
 public function executeUnbufferedQuery($result, $params, &$extra, $different)
 {
     if (is_array($params) && count($params) == 1 && is_array($params[0]) && count($this->placeholders) > 1) {
         $params = $params[0];
     }
     if ($different && $this->used) {
         $this->regenerateStatement();
     }
     $this->used = TRUE;
     $extension = $this->database->getExtension();
     if ($extension == 'pdo' && $this->database->getType() == 'mssql') {
         $extension = 'pdo_dblib';
     }
     $connection = $this->database->getConnection();
     $statement = $this->statement;
     $params = $this->prepareParams($params);
     // For the extensions that require the statement be passed to the result
     // object, we store it in a stdClass object so the result object knows
     // not to free it when done
     $statement_holder = new stdClass();
     $statement_holder->statement = NULL;
     switch ($extension) {
         case 'ibm_db2':
             $extra = $statement;
             if (db2_execute($statement, $params)) {
                 $statement_holder->statement = $statement;
             } else {
                 $result->setResult(FALSE);
             }
             break;
         case 'mssql':
             $result->setResult(mssql_query($result->getSQL(), $this->connection, 20));
             break;
         case 'mysql':
             $result->setResult(mysql_unbuffered_query($result->getSQL(), $this->connection));
             break;
         case 'mysqli':
             $extra = $this->statement;
             if ($statement->execute()) {
                 $statement_holder->statement = $statement;
             } else {
                 $result->setResult(FALSE);
             }
             break;
         case 'oci8':
             $result->setResult(oci_execute($statement, $this->database->isInsideTransaction() ? OCI_DEFAULT : OCI_COMMIT_ON_SUCCESS));
             break;
         case 'pgsql':
             $result->setResult(pg_execute($connection, $this->identifier, $params));
             break;
         case 'sqlite':
             $result->setResult(sqlite_unbuffered_query($connection, $this->database->escape($statement, $params), SQLITE_ASSOC, $extra));
             break;
         case 'sqlsrv':
             $extra = sqlsrv_execute($statement);
             if ($extra) {
                 $statement_holder->statement = $statement;
             } else {
                 $result->setResult($extra);
             }
             break;
         case 'pdo':
             $extra = $statement->execute();
             if ($extra) {
                 $result->setResult($statement);
             } else {
                 $result->setResult($extra);
             }
             break;
         case 'pdo_dblib':
             $sql = $this->database->escape($statement, $params);
             $result->setResult($res = $connection->query($sql));
             break;
     }
     if ($statement_holder->statement) {
         $result->setResult($statement_holder);
     }
     return $result;
 }