co0lc0der/simple-query-builder

A small easy-to-use php component for working with a database by PDO. It provides some public methods to manipulate data. Each SQL query is prepared and safe.

v0.4.1 2025-02-05 11:52 UTC

This package is auto-updated.

Last update: 2025-02-05 11:53:31 UTC


README

Latest Version GitHub repo size Packagist Downloads GitHub license Packagist PHP Version Support

This is a small easy-to-use PHP component for working with a database by PDO. It provides some public methods to compose SQL queries and manipulate data. Each SQL query is prepared and safe. QueryBuilder fetches data to arrays by default. At present time the component supports MySQL and SQLite (file or memory).

PAY ATTENTION! v0.2 and v0.3+ are incompatible.

Contributing

Bug reports and/or pull requests are welcome

License

The package is available as open source under the terms of the MIT license

Installation

The preferred way to install this extension is through composer.

Either run

composer require co0lc0der/simple-query-builder

or add

"co0lc0der/simple-query-builder": "*"

to the require section of your composer.json file.

How to use

Edit config.php and set the parameters up. Choose DB driver, DB name etc

$config = require_once __DIR__ . '/config.php';

Use composer autoloader

require_once __DIR__ . '/vendor/autoload.php';

use co0lc0der\QueryBuilder\Connection;
use co0lc0der\QueryBuilder\QueryBuilder;

Init QueryBuilder with Connection::make()

$query = new QueryBuilder(Connection::make($config['database'])); // $printErrors = false

// for printing errors (since 0.3.6)
$query = new QueryBuilder(Connection::make($config['database']), true)

Usage examples

Select all rows from a table

$results = $query->select('users')->all();

Result query

SELECT * FROM `users`;

Select rows with two conditions

$results = $query->select('users')->where([
  ['id', '>', 1],
  'and',
  ['group_id', 2],
])->all();

Result query

SELECT * FROM `users` WHERE (`id` > 1) AND (`group_id` = 2);

Update a row

$query->update('posts', ['status' => 'published'])
        ->where([['YEAR(`updated_at`)', '>', 2020]])
        ->go();

Result query

UPDATE `posts` SET `status` = 'published'
WHERE (YEAR(`updated_at`) > 2020);

More examples you can find in documentation or tests.

ToDo

I'm going to add the next features into future versions

  • write more unit testes
  • add subqueries for QueryBuilder
  • add BETWEEN
  • add WHERE EXISTS
  • add TableBuilder class (for beginning CREATE TABLE, move $query->drop() and $query->truncate() into it)
  • add PostgreSQL support
  • add WITH
  • and probably something more