You are here

public function Connection::prepareStatement in Drupal 9

Same name in this branch
  1. 9 core/lib/Drupal/Core/Database/Connection.php \Drupal\Core\Database\Connection::prepareStatement()
  2. 9 core/lib/Drupal/Core/Database/Driver/sqlite/Connection.php \Drupal\Core\Database\Driver\sqlite\Connection::prepareStatement()
  3. 9 core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php \Drupal\Core\Database\Driver\pgsql\Connection::prepareStatement()

Returns a prepared statement given a SQL string.

This method caches prepared statements, reusing them when possible. It also prefixes tables names enclosed in curly braces and, optionally, quotes identifiers enclosed in square brackets.

Parameters

string $query: The query string as SQL, with curly braces surrounding the table names, and square brackets surrounding identifiers.

array $options: An associative array of options to control how the query is run. See the documentation for self::defaultOptions() for details. The content of the 'pdo' key will be passed to the prepared statement.

bool $allow_row_count: (optional) A flag indicating if row count is allowed on the statement object. Defaults to FALSE.

Return value

\Drupal\Core\Database\StatementInterface A PDO prepared statement ready for its execute() method.

Throws

\InvalidArgumentException If multiple statements are included in the string, and delimiters are not allowed in the query.

\Drupal\Core\Database\DatabaseExceptionWrapper

Overrides Connection::prepareStatement

File

core/lib/Drupal/Core/Database/Driver/pgsql/Connection.php, line 204

Class

Connection
PostgreSQL implementation of \Drupal\Core\Database\Connection.

Namespace

Drupal\Core\Database\Driver\pgsql

Code

public function prepareStatement(string $query, array $options, bool $allow_row_count = FALSE) : StatementInterface {

  // mapConditionOperator converts some operations (LIKE, REGEXP, etc.) to
  // PostgreSQL equivalents (ILIKE, ~*, etc.). However PostgreSQL doesn't
  // automatically cast the fields to the right type for these operators,
  // so we need to alter the query and add the type-cast.
  $query = preg_replace('/ ([^ ]+) +(I*LIKE|NOT +I*LIKE|~\\*|!~\\*) /i', ' ${1}::text ${2} ', $query);
  return parent::prepareStatement($query, $options, $allow_row_count);
}