
PDO Database Abstraction Layer
A simple database abstraction layer for MySQL PDO
Installation
Installation is available via Composer/Packagist, you can add the following line to your composer.json file:
"adamb/database": "^1.0"
or
composer require adamb/database
Class Features
- Optional cache support with Memcache / Memcached / Redis / XCache
- Optional connection to secondary database incase the no connection to the primary MySQL server is available
- Connects to a MySQL database via PDO
- Simplify queries to SELECT / INSERT / UPDATE and DELETE
- Built in prepared statements
- Compatible with PHP5.6 and later
License
This software is distributed under the MIT license. Please read LICENSE for information on the
software availability and distribution.
Usage
Example of usage can be found below with what queries they would result in (For security all queries are run using prepared statements with values added on execute() after the prepare() has been run)
1. Connect
<?php
$hostname = '127.0.0.1';
$username = 'root';
$password = '';
$database = 'my_db';
$backup_server = '127.0.0.2';
$db = new DBAL\Database($hostname, $username, $password, $database);
$db = new DBAL\Database($hostname, $username, $password, $database, $backup_server);
2. Select
$db->select('test_table');
$db->select('test_table', array('id' => 3));
$db->select('test_table', array('id' => array('>=', 3)));
$db->select('test_table', array('id' => array('>=', 3)), array('name', 'email'));
$db->select('test_table', array('id' => array('>=', 3)), array('name', 'email'), array('id' => 'DESC'));
$db->select('test_table', array('id' => array('IN' => array(1, 2, 3))));
$db->select('test_table', array('id' => array('NOT IN' => array(2, 3))));
$db->select('test_table', array('id' => array('BETWEEN' => array(1, 3))));
$db->select('test_table', array('id' => array('NOT BETWEEN' => array(2, 10))));
$db->selectAll('test_table', array('id' => array('>=', 3)), array('name', 'email'), array('id' => 'DESC'), 150);
3. Insert
$db->insert('test_table', array('name' => 'Bob', 'email' => 'bob@gmail.com'));
4. Update
$db->update('test_table', array('name' => 'Ken', 'email' => 'ken@gmail.com'), array('id' => 12345));
$db->update('test_table', array('name' => 'Ken'), array('name' => 'Bob'), 50);
5. Delete
$db->delete('test_table', array('id' => 1));
$db->delete('test_table', array('name' => 'Ted'), 50);
6. Count
$db->count('test_table');
$db->count('test_table', array('name' => 'Bob'));
7. Query
Any other queries can be run using the query command by passing the SQL query and values
$db->query("SELECT * FROM `test_table` WHERE `name` = ? OR `name` => ?;", array('John', 'Phil'));
$db->query("UPDATE `test_table` SET `name` = 'Karl' WHERE `name` = ? OR `name` => ?;", array('John', 'Phil'));
$db->query("SELECT * FROM `test_table` WHERE `field1` = ? AND (`field2` => ? OR `field3` => ?);", array('value1', 'value2', 'value3'));
$db->query("SELECT * FROM `test_table` WHERE `field1` = ? UNION SELECT * FROM `another_table` WHERE `another_field` = ?;", array('value1', 'value2'));
$db->query("SELECT * FROM `test_table` WHERE `field1` = :search UNION SELECT * FROM `another_table` WHERE `another_field` = :search;", array(':search' => 'value1'));
$db->query("SELECT `test_table`.`field1`, `test_table`.`field2`, `another_table`.`field1` FROM `test_table` INNER JOIN `another_table` ON `test_table`.`reference_field` = `another_table`.`some_field`;");
$db->query("SELECT `test_table`.`field1`, `test_table`.`field2`, `another_table`.`field1` FROM `test_table` INNER JOIN `another_table` ON `test_table`.`reference_field` = `another_table`.`some_field` AND `test_table`.`field1` <= ? LIMIT 100;", array('value'));
8. FetchColumn
$column = $db->fetchColumn('test_table', array('id' => 3), array('name', 'email'));
echo($column[0]);
echo($column[1]);
$column = $db->fetchColumn('test_table', array('id' => 3), array('name', 'email'), 1);
echo($column);
9. NumRows
$db->numRows();
$db->rowCount();
$db->update('test_table', array('name' => 'Ken'), array('name' => 'Bob'));
echo($db->numRows());
10. LastInsertId
$db->insert('test_table', array('name' => 'Bob', 'email' => 'bob@gmail.com'));
echo($db->lastInsertId());
11. isConnected
$db->isConnected();
12. Caching
Database caching can be added to queries with support for Memcache / Memcached / Redis and XCache
$caching = new DBAL\Caching\Memcached();
$db = new DBAL\Database($hostname, $username, $password, $database, $backup_server, $caching);
$caching = new DBAL\Caching\Memcached();
$db = new DBAL\Database($hostname, $username, $password, $database);
$db->setCaching($caching);