public function DatabaseStatement_sqlite::execute
public DatabaseStatement_sqlite::execute($args = array(), $options = array())
Executes a prepared statement.
Parameters
$args: An array of values with as many elements as there are bound parameters in the SQL statement being executed.
$options: An array of options for this query.
Return value
TRUE on success, or FALSE on failure.
Overrides DatabaseStatementPrefetch::execute
File
- includes/database/sqlite/database.inc, line 467
- Database interface code for SQLite embedded database engine.
Class
- DatabaseStatement_sqlite
- Specific SQLite implementation of DatabaseConnection.
Code
public function execute($args = array(), $options = array()) { try { $return = parent::execute($args, $options); } catch (PDOException $e) { if (!empty($e->errorInfo[1]) && $e->errorInfo[1] === 17) { // The schema has changed. SQLite specifies that we must resend the query. $return = parent::execute($args, $options); } else { // Rethrow the exception. throw $e; } } // In some weird cases, SQLite will prefix some column names by the name // of the table. We post-process the data, by renaming the column names // using the same convention as MySQL and PostgreSQL. $rename_columns = array(); foreach ($this->columnNames as $k => $column) { // In some SQLite versions, SELECT DISTINCT(field) will return "(field)" // instead of "field". if (preg_match("/^\((.*)\)$/", $column, $matches)) { $rename_columns[$column] = $matches[1]; $this->columnNames[$k] = $matches[1]; $column = $matches[1]; } // Remove "table." prefixes. if (preg_match("/^.*\.(.*)$/", $column, $matches)) { $rename_columns[$column] = $matches[1]; $this->columnNames[$k] = $matches[1]; } } if ($rename_columns) { // DatabaseStatementPrefetch already extracted the first row, // put it back into the result set. if (isset($this->currentRow)) { $this->data[0] = &$this->currentRow; } // Then rename all the columns across the result set. foreach ($this->data as $k => $row) { foreach ($rename_columns as $old_column => $new_column) { $this->data[$k][$new_column] = $this->data[$k][$old_column]; unset($this->data[$k][$old_column]); } } // Finally, extract the first row again. $this->currentRow = $this->data[0]; unset($this->data[0]); } return $return; }
© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/includes!database!sqlite!database.inc/function/DatabaseStatement_sqlite::execute/7.x