$database API variable / WireDatabasePDO class

All database operations in ProcessWire are performed via this PDO-style database class.

ProcessWire creates the database connection automatically at boot and this is available from the $database API variable. If you want to create a new connection on your own, choose either option A or B below:

// The following are required to construct a WireDatabasePDO
$dsn = 'mysql:dbname=mydb;host=myhost;port=3306';
$username = 'username';
$password = 'password';
$driver_options = []; // optional

// Construct option A
$db = new WireDatabasePDO($dsn, $username, $password, $driver_options);

// Construct option B
$db = new WireDatabasePDO([
  'dsn' => $dsn,
  'user' => $username,
  'pass' => $password,
  'options' => $driver_options, // optional
  'reader' => [ // optional
    'dsn' => '…',

Click any linked item for full usage details and examples. Hookable methods are indicated with the icon. In addition to those shown below, the WireDatabasePDO class also inherits all the methods and properties of: Wire.

Show $var?             Show args?        



$database->columnExists(string $table)
bool arrayDoes the given column exist in given table? 
stringGet current database charset (lowercase) 
$database->getColumns(string $table)
arrayGet all columns from given table 
stringGet current database engine (lowercase) 
$database->getIndexes(string $table)
arrayGet all indexes from given table 
intGet max length allowed for a fully indexed varchar column in ProcessWire 
$database->getPrimaryKey(string $table)
string arrayGet column(s) or info for given table’s primary key/index 
arrayGet array of all tables in this database. 
$database->indexExists(string $table, string $indexName)
bool arrayDoes table have an index with given name? 
$database->renameColumn(string $table, string $oldName, string $newName)
boolRename a table column without changing type 
$database->renameColumns(string $table, array $columns)
intRename table columns without changing type 
$database->tableExists(string $table)
boolDoes the given table exist in this database? 


(nothing)Close the PDO connection 
stringFetch the SQLSTATE associated with the last operation on the statement handle 
arrayFetch extended error information associated with the last operation on the database handle 
$database->getAttribute(int $attribute)
mixedRetrieve a database connection attribute 
PDOReturn the actual current PDO connection instance 
$database->setAttribute(int $attribute, mixed $value)
boolSets an attribute on the database handle 


WireDatabaseBackupRetrieve new instance of WireDatabaseBackups ready to use with this connection 
array bool intLog a query, start/stop query logging, or return logged queries 
string boolGet SQL mode, set SQL mode, add to existing SQL mode, or remove from existing SQL mode 

Additional methods and properties

In addition to the methods and properties above, WireDatabasePDO also inherits the methods and properties of these classes:

API reference based on ProcessWire core version 3.0.200

Twitter updates

  • Weekly update, July 29: Continuing upgrades to ProcessWire’s comments system and FormBuilder, along with a working example—More
    29 July 2022
  • Weekly update for July 22– Looking back at what web development was like in the year 2000. Plus some more discussion on the path from CKEditor 4 to CkEditor 5 in ProcessWire: More
    22 July 2022
  • ProcessWire 3.0.203 core updates: new support for custom fields on comments and more— More
    15 July 2022

Latest news

  • ProcessWire Weekly #429
    In the 429th issue of ProcessWire Weekly we'll check out the latest core updates, introduce a new third party module, and more. Read on!
    Weekly.pw / 30 July 2022
  • Debugging tools built into ProcessWire
    ProcessWire's core comes with a lot of helpful debugging tools and capabilities built-in. In this post we'll cover some of these useful tools and how to use them.
    Blog / 1 July 2022
  • Subscribe to weekly ProcessWire news

“Yesterday I sent the client a short documentation for their ProcessWire-powered website. Today all features already used with no questions. #cmsdoneright—Marc Hinse, Web designer/developer