A Query Builder and Database abstraction layer
Go to file
Timothy Warren 369ca6eb04 Flatten source structure a bit 2018-01-19 15:47:34 -05:00
build Update file headers 2018-01-19 13:43:19 -05:00
docs Update docs 2017-02-28 16:37:16 -05:00
src Flatten source structure a bit 2018-01-19 15:47:34 -05:00
tests Update file headers 2018-01-19 13:43:19 -05:00
.editorconfig Flatten source structure a bit 2018-01-19 15:47:34 -05:00
.gitignore Update file headers 2018-01-19 13:43:19 -05:00
.gitlab-ci.yml Update file headers 2018-01-19 13:43:19 -05:00
.scrutinizer.yml Moved protected query builder methods to abstract class 2014-03-27 15:46:28 -04:00
.travis.yml Fix dependency version, test on PHP 7.2 2018-01-19 10:53:40 -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
README.md Code Style fixes 2016-09-07 13:10:03 -04:00
RoboFile.php camelCase methods and properties 2016-10-13 21:55:23 -04:00
composer.json Flatten source structure a bit 2018-01-19 15:47:34 -05:00
phpdoc.dist.xml Move library into src folder, fix simpletest test runner 2015-07-29 16:51:17 -04:00
phpstan.neon Update file headers 2018-01-19 13:43:19 -05:00
phpunit.xml camelCase methods and properties 2016-10-13 21:55:23 -04: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

README.md

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)
  • Supported version of PHP (Older versions may work, but are not supported)

Databases Supported

  • Firebird (via interbase extension)
  • 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, firebird, sqlite
	'host' => 'localhost', // address or socket
	'user' => 'root',
	'pass' => '',
	'port' => '3306',
	'database' => 'test_db',

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

	// Optional paramaters
	'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 uses the same interface as CodeIgniter's Query Builder class. However, it does not implement the update_batch or caching methods. For specific query builder methods, see the class documentation. Underscored methods are also aliased to camel case methods.

You can also run queries manually.

To run a prepared statement, call $db->prepare_execute($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)
	->or_where('id !=' 5)
	->order_by('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

To retrieve the results of a query, use the PDO 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.