Database abstraction layer

  1. 7.x drupal-7.x/includes/database/database.inc database
  2. 6.x drupal-6.x/includes/database.inc database

Allow the use of different database servers using the same code base.

Drupal provides a slim database abstraction layer to provide developers with the ability to support multiple database servers easily. The intent of this layer is to preserve the syntax and power of SQL as much as possible, while letting Drupal control the pieces of queries that need to be written differently for different servers and provide basic security checks.

Most Drupal database queries are performed by a call to db_query() or db_query_range(). Module authors should also consider using pager_query() for queries that return results that need to be presented on multiple pages, and tablesort_sql() for generating appropriate queries for sortable tables.

For example, one might wish to return a list of the most recent 10 nodes authored by a given user. Instead of directly issuing the SQL query

  SELECT n.nid, n.title, n.created FROM node n WHERE n.uid = $uid LIMIT 0, 10;

one would instead call the Drupal functions:

  $result = db_query_range('SELECT n.nid, n.title, n.created
    FROM {node} n WHERE n.uid = %d', $uid, 0, 10);
  while ($node = db_fetch_object($result)) {
    // Perform operations on $node->body, etc. here.
  }

Curly braces are used around "node" to provide table prefixing via db_prefix_tables(). The explicit use of a user ID is pulled out into an argument passed to db_query() so that SQL injection attacks from user input can be caught and nullified. The LIMIT syntax varies between database servers, so that is abstracted into db_query_range() arguments. Finally, note the common pattern of iterating over the result set using db_fetch_object().

File

drupal-6.x/includes/database.inc, line 15
Wrapper for database interface code.

Functions

Namesort descending Location Description
db_affected_rows drupal-6.x/includes/database.pgsql.inc Determine the number of rows changed by the preceding query.
db_affected_rows drupal-6.x/includes/database.mysqli.inc Determine the number of rows changed by the preceding query.
db_affected_rows drupal-6.x/includes/database.mysql.inc Determine the number of rows changed by the preceding query.
db_check_setup drupal-6.x/includes/database.pgsql.inc Verify if the database is set up correctly.
db_column_exists drupal-6.x/includes/database.pgsql.inc Check if a column exists in the given table.
db_column_exists drupal-6.x/includes/database.mysqli.inc Check if a column exists in the given table.
db_column_exists drupal-6.x/includes/database.mysql.inc Check if a column exists in the given table.
db_connect drupal-6.x/includes/database.pgsql.inc Initialize a database connection.
db_connect drupal-6.x/includes/database.mysqli.inc Initialise a database connection.
db_connect drupal-6.x/includes/database.mysql.inc Initialize a database connection.
db_decode_blob drupal-6.x/includes/database.pgsql.inc Returns text from a Binary Large OBject value. In case of PostgreSQL decodes data after select from bytea field.
db_decode_blob drupal-6.x/includes/database.mysqli.inc Returns text from a Binary Large OBject value.
db_decode_blob drupal-6.x/includes/database.mysql.inc Returns text from a Binary Large Object value.
db_distinct_field drupal-6.x/includes/database.inc Adds the DISTINCT flag to the supplied query and returns the altered query.
db_encode_blob drupal-6.x/includes/database.pgsql.inc Returns a properly formatted Binary Large OBject value. In case of PostgreSQL encodes data for insert into bytea field.
db_encode_blob drupal-6.x/includes/database.mysqli.inc Returns a properly formatted Binary Large Object value.
db_encode_blob drupal-6.x/includes/database.mysql.inc Returns a properly formatted Binary Large OBject value.
db_error drupal-6.x/includes/database.pgsql.inc Determine whether the previous query caused an error.
db_error drupal-6.x/includes/database.mysqli.inc Determine whether the previous query caused an error.
db_error drupal-6.x/includes/database.mysql.inc Determine whether the previous query caused an error.
db_escape_string drupal-6.x/includes/database.pgsql.inc Prepare user input for use in a database query, preventing SQL injection attacks. Note: This function requires PostgreSQL 7.2 or later.
db_escape_string drupal-6.x/includes/database.mysqli.inc Prepare user input for use in a database query, preventing SQL injection attacks.
db_escape_string drupal-6.x/includes/database.mysql.inc Prepare user input for use in a database query, preventing SQL injection attacks.
db_escape_table drupal-6.x/includes/database.inc Restrict a dynamic table, column or constraint name to safe characters.
db_fetch_array drupal-6.x/includes/database.pgsql.inc Fetch one result row from the previous query as an array.
db_fetch_array drupal-6.x/includes/database.mysqli.inc Fetch one result row from the previous query as an array.
db_fetch_array drupal-6.x/includes/database.mysql.inc Fetch one result row from the previous query as an array.
db_fetch_object drupal-6.x/includes/database.pgsql.inc Fetch one result row from the previous query as an object.
db_fetch_object drupal-6.x/includes/database.mysqli.inc Fetch one result row from the previous query as an object.
db_fetch_object drupal-6.x/includes/database.mysql.inc Fetch one result row from the previous query as an object.
db_is_active drupal-6.x/includes/database.inc Returns a boolean depending on the availability of the database.
db_last_insert_id drupal-6.x/includes/database.pgsql.inc Returns the last insert id. This function is thread safe.
db_lock_table drupal-6.x/includes/database.pgsql.inc Lock a table. This function automatically starts a transaction.
db_lock_table drupal-6.x/includes/database.mysqli.inc Lock a table.
db_lock_table drupal-6.x/includes/database.mysql.inc Lock a table.
db_placeholders drupal-6.x/includes/database.inc Generate placeholders for an array of query arguments of a single type.
db_prefix_tables drupal-6.x/includes/database.inc Append a database prefix to all tables in a query.
db_query drupal-6.x/includes/database.pgsql.inc Runs a basic query in the active database.
db_query_range drupal-6.x/includes/database.pgsql.inc Runs a limited-range query in the active database.
db_query_range drupal-6.x/includes/database.mysqli.inc Runs a limited-range query in the active database.
db_query_range drupal-6.x/includes/database.mysql.inc Runs a limited-range query in the active database.
db_query_temporary drupal-6.x/includes/database.pgsql.inc Runs a SELECT query and stores its results in a temporary table.
db_query_temporary drupal-6.x/includes/database.mysqli.inc Runs a SELECT query and stores its results in a temporary table.
db_query_temporary drupal-6.x/includes/database.mysql.inc Runs a SELECT query and stores its results in a temporary table.
db_result drupal-6.x/includes/database.pgsql.inc Return an individual result field from the previous query.
db_result drupal-6.x/includes/database.mysqli.inc Return an individual result field from the previous query.
db_result drupal-6.x/includes/database.mysql.inc Return an individual result field from the previous query.
db_rewrite_sql drupal-6.x/includes/database.inc Rewrites node, taxonomy and comment queries. Use it for listing queries. Do not use FROM table1, table2 syntax, use JOIN instead.
db_set_active drupal-6.x/includes/database.inc Activate a database for future queries.
db_status_report drupal-6.x/includes/database.pgsql.inc Report database status.
db_status_report drupal-6.x/includes/database.mysqli.inc Report database status.
db_status_report drupal-6.x/includes/database.mysql.inc Report database status.
db_table_exists drupal-6.x/includes/database.pgsql.inc Check if a table exists.
db_table_exists drupal-6.x/includes/database.mysqli.inc Check if a table exists.
db_table_exists drupal-6.x/includes/database.mysql.inc Check if a table exists.
db_unlock_tables drupal-6.x/includes/database.pgsql.inc Unlock all locked tables. This function automatically commits a transaction.
db_unlock_tables drupal-6.x/includes/database.mysqli.inc Unlock all locked tables.
db_unlock_tables drupal-6.x/includes/database.mysql.inc Unlock all locked tables.
db_version drupal-6.x/includes/database.pgsql.inc Returns the version of the database server currently in use.
db_version drupal-6.x/includes/database.mysqli.inc Returns the version of the database server currently in use.
db_version drupal-6.x/includes/database.mysql.inc Returns the version of the database server currently in use.
pager_query drupal-6.x/includes/pager.inc Perform a paged database query.
tablesort_sql drupal-6.x/includes/tablesort.inc Create an SQL sort clause.
update_sql drupal-6.x/includes/database.inc Perform an SQL query and return success or failure.
_db_error_page drupal-6.x/includes/database.inc Helper function to show fatal database errors.
_db_query drupal-6.x/includes/database.pgsql.inc Helper function for db_query().
_db_query drupal-6.x/includes/database.mysqli.inc Helper function for db_query().
_db_query drupal-6.x/includes/database.mysql.inc Helper function for db_query().
_db_query_callback drupal-6.x/includes/database.inc Helper function for db_query().
_db_rewrite_sql drupal-6.x/includes/database.inc Helper function for db_rewrite_sql.

Constants

Namesort descending Location Description
DB_QUERY_REGEXP drupal-6.x/includes/database.inc Indicates the place holders that should be replaced in _db_query_callback().