Do you wish to register an account?
A Query Builder and Database abstraction layer
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Timothy Warren 4c8cd18060 Fix travis config by allowing ppc to fail 5 months ago
apiDocumentation Update API docs 1 year ago
build Update phpunit config 5 months ago
src Fix method signature for PHP 8 5 months ago
tests Attempt to fix MySQL transaction test 5 months ago
.editorconfig Flatten source structure a bit 3 years ago
.gitignore Cleanup/update build scripts/dependencies 1 year ago
.scrutinizer.yml Moved protected query builder methods to abstract class 7 years ago
.travis.yml Fix travis config by allowing ppc to fail 5 months ago Move development from fork to main repo on develop branch, test more PHP versions 5 years ago Code Style fixes 5 years ago Require 7.4, add typed properties to classes 1 year ago
RoboFile.php Implement basic 'returning' method for Postgres 1 year ago
composer.json Update dependencies 5 months ago
phpdox.xml Implement basic 'returning' method for Postgres 1 year ago
phpstan.neon Remove PDOInterface to prevent conflicts in method parameters with native PDO object 3 years ago


A query builder/database abstraction layer, using prepared statements for security.

Code Coverage Scrutinizer Code Quality Latest Stable Version Total Downloads Latest Unstable Version


  • PDO extensions for the databases you wish to use
  • PHP 7.4 or later

Databases Supported

  • MySQL 5+ / MariaDB
  • PostgreSQL 8.4+
  • SQLite

Including Query in your application

  • Install via composer and include vendor/autoload.php


Create a connection array or object similar to this:


$params = array(
	'type' => 'mysql', // mysql, pgsql, sqlite
	'host' => 'localhost', // address or socket
	'user' => 'root',
	'pass' => '',
	'port' => '3306',
	'database' => 'test_db',

	// Only required for
	// SQLite
	'file' => '/path/to/db/file',

	// Optional parameters
	'prefix' => 'tbl_', 	// Database table prefix
	'alias' => 'old' 		// Connection name for the Query function

$db = Query($params);

The parameters required depend on the database.

Query function

You can use the Query() function as a reference to the last connected database. E.g.


// or
$result = Query()->query($sql);

If the alias key is set in the parameters, you can refer to a specific database connection


// Set the alias in the connection parameters
$params['alias'] = 'old';

// Connect to the legacy database

Running Queries

Query is based on CodeIgniter's Query Builder class. However, it has camelCased method names, and does not implement the caching methods. For specific query builder methods, see the class documentation.

Other database methods not directly involved in building queries, are also available from the query builder object. The methods available depend on the database, but common methods are documented here.

You can also run queries manually.

To run a prepared statement, call $db->prepareExecute($sql, $params).

To run a plain query, $db->query($sql)

Retrieving Results:

An example of a moderately complex query:

$query = $db->select('id, key as k, val')
	->from('table t')
	->where('k >', 3)
	->orWhere('id !=', 5)
	->orderBy('val', 'DESC')
	->limit(3, 1)

This will generate a query similar to (with this being the output for a PostgreSQL database):

SELECT "id", "key" AS "k", "val"
FROM "table" "t"
WHERE "k" > ?
OR "id" != ?

The query execution methods get, getWhere, insert, insertBatch,update, and delete return a native PDOStatement object. To retrieve the results of a query, use the PDOStatement method fetch and/or fetchAll.

$query = $db->get('table_name');

$results = $query->fetchAll(PDO::FETCH_ASSOC);

Inserting / Updating

An example of an insert query:

$query = $db->set('foo', 'bar')
	->set('foobar', 'baz')
	->where('foo !=', 'bar')

An example of an update query:

$query = $db->set('foo', 'bar')
	->set('foobar', 'baz')
	->where('foo !=', 'bar')

The set method can also take an array as a parameter, instead of setting individual values.