A Query Builder and Database abstraction layer
Go to file
2018-01-31 14:17:14 -05:00
apiDocumentation Update documentation 2018-01-26 16:27:34 -05:00
build Simplify gitlab build script a bit 2018-01-31 14:17:14 -05:00
src SQLite improvements, remove nullable PDOStatement return values 2018-01-26 15:45:46 -05:00
tests SQLite improvements, remove nullable PDOStatement return values 2018-01-26 15:45:46 -05:00
.editorconfig Flatten source structure a bit 2018-01-19 15:47:34 -05:00
.gitignore SQLite improvements, remove nullable PDOStatement return values 2018-01-26 15:45:46 -05:00
.gitlab-ci.yml Attempt to use lighter docker images for gitlab builds 2018-01-31 14:04:50 -05:00
.scrutinizer.yml Moved protected query builder methods to abstract class 2014-03-27 15:46:28 -04:00
.travis.yml Update builds to remove PHP 7 support 2018-01-23 13:49:51 -05:00
composer.json Remove method separators, update documentation building configuration 2018-01-24 15:03:41 -05:00
CONTRIBUTING.md Move development from fork to main repo on develop branch, test more PHP versions 2016-07-19 16:57:44 -04:00
LICENSE.md Code Style fixes 2016-09-07 13:10:03 -04:00
phpdox.xml Remove some old code coupling and boilerplate 2018-01-24 15:23:26 -05:00
phpstan.neon Remove PDOInterface to prevent conflicts in method parameters with native PDO object 2018-01-22 16:04:29 -05:00
README.md Update documentation 2018-01-26 16:27:34 -05:00
RoboFile.php Remove method separators, update documentation building configuration 2018-01-24 15:03:41 -05:00
sonar-project.properties Move development from fork to main repo on develop branch, test more PHP versions 2016-07-19 16:57:44 -04:00

Query

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

Build Status Code Coverage Scrutinizer Code Quality Latest Stable Version Total Downloads Latest Unstable Version License

Requirements

  • PDO extensions for the databases you wish to use (unless it's Firebird, in which case, the interbase extension is required)
  • PHP 7.1 or later

Databases Supported

  • MySQL
  • PostgreSQL
  • SQLite

Including Query in your application

  • Install via composer and include vendor/autoload.php

Connecting

Create a connection array or object similar to this:

<?php

$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.

<?php
Query()->get('table_name');

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

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

<?php

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

// Connect to the legacy database
Query('old')->query($sql);

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:

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

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" != ?
ORDER BY "val" DESC
LIMIT 3 OFFSET 1

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

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

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

Inserting / Updating

An example of an insert query:

<?php
$query = $db->set('foo', 'bar')
	->set('foobar', 'baz')
	->where('foo !=', 'bar')
	->insert('table');

An example of an update query:

<?php
$query = $db->set('foo', 'bar')
	->set('foobar', 'baz')
	->where('foo !=', 'bar')
	->update('table');

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