PHPackages                             josantonius/database - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. josantonius/database

AbandonedArchivedLibrary[Database &amp; ORM](/categories/database)

josantonius/database
====================

Library for SQL database management to be used by several providers at the same time.

1.2.0(8y ago)1042843MITPHPPHP ^5.6 || ^7.0

Since Jan 9Pushed 3y ago2 watchersCompare

[ Source](https://github.com/josantonius/php-database)[ Packagist](https://packagist.org/packages/josantonius/database)[ RSS](/packages/josantonius-database/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (10)Dependencies (5)Versions (13)Used By (3)

PHP Database library
====================

[](#php-database-library)

[![Latest Stable Version](https://camo.githubusercontent.com/19214af378f525a32103cb18fcd415b150d00c4336b3488210b4d58270865797/68747470733a2f2f706f7365722e707567782e6f72672f6a6f73616e746f6e6975732f44617461626173652f762f737461626c65)](https://packagist.org/packages/josantonius/Database)[![License](https://camo.githubusercontent.com/79cb648c21470aac59443c2d0c363413962a59a41dad3a94c2d1761c87ec4f83/68747470733a2f2f706f7365722e707567782e6f72672f6a6f73616e746f6e6975732f44617461626173652f6c6963656e7365)](LICENSE)

[Versión en español](README-ES.md)

SQL database management to be used by several providers at the same time.

---

- [Requirements](#requirements)
- [Installation](#installation)
- [Quick Start](#quick-start)
- [Get connection](#get-connection)
- [CREATE TABLE](#create-table)
- [SELECT](#select)
- [INSERT INTO](#insert)
- [UPDATE](#update)
- [REPLACE](#replace)
- [DELETE](#delete)
- [TRUNCATE TABLE](#truncate)
- [DROP TABLE](#drop)
- [Supported datatypes for prepared statements](#supported-datatypes-for-prepared-statements)
- [Tests](#tests)
- [Sponsor](#Sponsor)
- [License](#license)

---

Requirements
------------

[](#requirements)

This library is supported by **PHP versions 5.6** or higher and is compatible with **HHVM versions 3.0** or higher.

Installation
------------

[](#installation)

The preferred way to install this extension is through [Composer](http://getcomposer.org/download/).

To install **PHP Database library**, simply:

```
composer require Josantonius/Database

```

The previous command will only install the necessary files, if you prefer to **download the entire source code** you can use:

```
composer require Josantonius/Database --prefer-source

```

You can also **clone the complete repository** with Git:

```
git clone https://github.com/Josantonius/PHP-Database.git

```

Or **install it manually**:

Download [Database.php](https://raw.githubusercontent.com/Josantonius/PHP-Database/master/src/Database.php), [Provider.php](https://raw.githubusercontent.com/Josantonius/PHP-Database/master/src/Provider/Provider.php), [PDOprovider.php](https://raw.githubusercontent.com/Josantonius/PHP-Database/master/src/Provider/PDOprovider.php), [MSSQLprovider.php](https://raw.githubusercontent.com/Josantonius/PHP-Database/master/src/Provider/MSSQLprovider.php) and [DBException.php](https://raw.githubusercontent.com/Josantonius/PHP-Database/master/src/Exception/DBException.php):

```
wget https://raw.githubusercontent.com/Josantonius/PHP-Database/master/src/Database.php
wget https://raw.githubusercontent.com/Josantonius/PHP-Database/master/src/Provider/Provider.php
wget https://raw.githubusercontent.com/Josantonius/PHP-Database/master/src/Provider/PDOprovider.php
wget https://raw.githubusercontent.com/Josantonius/PHP-Database/master/src/Provider/MSSQLprovider.php
wget https://raw.githubusercontent.com/Josantonius/PHP-Database/master/src/Exception/DBException.php

```

Get connection
--------------

[](#get-connection)

### - Get connection

[](#--get-connection)

```
Database::getConnection($id, $provider, $host, $user, $name, $password, $settings);
```

AttributeDescriptionTypeRequiredDefault$idDatabase unique ID.stringYes$providerName of provider class.stringNonull$hostDatabase host.stringNonull$userDatabase user.stringNonull$nameDatabase name.stringNonull$passwordDatabase password .stringNonullAttributeKeyDescriptionTypeRequiredDefault$settingsDatabase options. Once the connection is made, this configuration will be available in the database connection object: $db-&gt;settings.arrayNonull$settings'port'Database port.stringNo$settings'charset'Database charset.stringNo**\# Return** (object) → object with the connection

```
$db = Database::getConnection(
    'identifier',  # Unique identifier
    'PDOprovider', # Database provider name
    'localhost',   # Database server
    'db-user',     # Database user
    'db-name',     # Database name
    'password',    # Database password
    array('charset' => 'utf8')
);

$externalDB = Database::getConnection(
    'external',          # Unique identifier
    'PDOprovider',       # Database provider name
    'http://site.com',   # Database server
    'db-user',           # Database user
    'db-name',           # Database name
    'password',          # Database password
    array('charset' => 'utf8')
);

// And once the connection is established:

$db = Database::getConnection('identifier');

$externalDB = Database::getConnection('external');
```

Query
-----

[](#query)

### - Process query and prepare it for the provider

[](#--process-query-and-prepare-it-for-the-provider)

```
$db->query($query, $statements, $result);
```

AttributeDescriptionTypeRequiredDefault$queryQuery.stringYes$statementsStatements.arrayNonull$resultQuery result; 'obj', 'array\_num', 'array\_assoc', 'rows', 'id'.stringNo'obj'**\# Return** (mixed) → result as object, array, int...

**\# throws** \[DBException\] → invalid query type

```
$db->query(
    'CREATE TABLE test (
        id    INT(6)      PRIMARY KEY,
        name  VARCHAR(30) NOT NULL,
        email VARCHAR(50)
    )'
);

$db->query(
    'SELECT id, name, email
     FROM test',
    false,
    'array_assoc' // array_assoc, obj, array_num
);

$statements[] = [1, "Many"];
$statements[] = [2, "many@email.com"];

$db->query(
    'INSERT INTO test (name, email)
     VALUES (?, ?)',
    $statements,
    'id' // id, rows
);
```

CREATE TABLE
------------

[](#create-table)

### - CREATE TABLE statement

[](#--create-table-statement)

```
$db->create($data)
   ->table($table)
   ->foreing($id)
   ->reference($table)
   ->on($table)
   ->actions($action)
   ->engine($type)
   ->charset($type)
   ->execute();
```

MethodAttributeDescriptionTypeRequiredDefault$dataColumn name and configuration for data types.arrayYestable()Set database table name.methodYes$tableTable name.stringYesforeing()Set foreing key.methodNo$idColumn id.stringYesreference()Set reference for foreing keys.methodNo$tableTable name.arrayYeson()Set database table name.methodNo$tableTable name.arrayYesactions()Set actions when delete or update for foreing key.methodNo$actionAction when delete or update.arrayYesengine()Set table engine.methodNo$typeEngine type.stringYescharset()Set table charset.methodNo$typeCharset type.stringYesexecute()Execute query.methodYes**\# Return** (boolean)

```
$params = [
    'id'    => 'INT(6) PRIMARY KEY',
    'name'  => 'VARCHAR(30) NOT NULL',
    'email' => 'VARCHAR(50)'
];

$query = $db->create($params)
            ->table('test')
            ->execute();

$db->create($params)
   ->table('test_two')
   ->foreing('id')
   ->reference('id')
   ->on('test')
   ->actions('ON DELETE CASCADE ON UPDATE CASCADE')
   ->engine('innodb')
   ->charset('utf8')
   ->execute();
```

SELECT
------

[](#select)

### - SELECT statement

[](#--select-statement)

```
$db->select($columns)
   ->from($table)
   ->where($clauses, $statements)
   ->order($type)
   ->limit($number)
   ->execute($result);
```

MethodAttributeDescriptionTypeRequiredDefault$columnsColumn/s name.mixedNo'\*'from()Set database table name.methodYes$tableTable name.stringYeswhere()Where clauses.methodNo$clausesColumn name and value.mixedYes$statementsStatements.arrayNonullorder()Order.methodNo$typeQuery sort parameters.stringYeslimit()Limit.methodNo$numberNumber.intYesexecute()Execute query.methodYes$resultQuery result; 'obj', 'array\_num', 'array\_assoc', 'rows'.stringNo'obj'**\# Return** (mixed) → query result (object, array, int...) or rows affected

```
#SELECT all
$db->select()
    ->from('test')
    ->execute('array_num');

#SELECT with all params
$db->select(['id', 'name'])
   ->from('test')
   ->where(['id = 4885', 'name = "Joe"'])
   ->order(['id DESC', 'name ASC'])
   ->limit(1)
   ->execute('obj');

#SELECT with statements
$statements[] = [1, 3008];
$statements[] = [2, 'Manny'];

$db->select('name')
   ->from('test')
   ->where('id = ? OR name = ?', $statements)
   ->execute('rows');

#Other version of SELECT with statements
$statements[] = [':id', 8, 'int'];
$statements[] = [':email', null, 'null'];

$clauses = [
    'id    = :id',
    'email = :email'
];

$db->select('name')
   ->from('test')
   ->where($clauses, $statements)
   ->execute('rows');
```

INSERT INTO
-----------

[](#insert-into)

### - INSERT INTO statement

[](#--insert-into-statement)

```
$db->insert($data, $statements)
   ->in($table)
   ->execute($result);
```

MethodAttributeDescriptionTypeRequiredDefault$dataColumn name and value.arrayYes$statementsStatements.arrayNonullin()Set database table name.methodYes$tableTable name.stringYesexecute()Execute query.methodYes$resultQuery result; 'rows', 'id'.stringNo'rows'**\# Return** (int) → rows affected or last row affected ID

```
#INSERT INTO basic example
$data = [
    "name"  => "Isis",
    "email" => "isis@email.com",
];

$db->insert($data)
   ->in('test')
   ->execute();

#INSERT INTO with statements
$data = [
    "name"  => "?",
    "email" => "?",
];

$statements[] = [1, "Isis"];
$statements[] = [2, "isis@email.com"];

$db->insert($data, $statements)
   ->in('test')
   ->execute('rows');

#Other version of INSERT INTO with statements
$data = [
    "name"  => ":name",
    "email" => ":email",
];

$statements[] = [":name", "Isis", "str"];
$statements[] = [":email", "isis@email.com", "str"];

$db->insert($data, $statements)
   ->in('test')
   ->execute('id');
```

UPDATE
------

[](#update)

### - UPDATE statement

[](#--update-statement)

```
$db->update($data, $statements)
   ->in($table)
   ->where($clauses, $statements)
   ->execute();
```

MethodAttributeDescriptionTypeRequiredDefault$dataColumn name and value.arrayYes$statementsStatements.arrayNonullin()Set database table name.methodYes$tableTable name.stringYeswhere()Where clauses.methodNo$clausesColumn name and value.mixedYes$statementsStatements.arrayNonullexecute()Execute query.methodYes**\# Return** (int) → rows affected

```
#UPDATE basic example
$data = [
    'name'  => 'Isis',
    'email' => 'isis@email.com',
];

$db->update($data)
   ->in('test')
   ->execute();

#UPDATE with WHERE
$data = [
    'name'  => 'Manny',
    'email' => 'manny@email.com',
];

$clauses = [
    'name  = "isis"',
    'email = "isis@email.com"'
];

$db->update($data)
   ->in('test')
   ->where($clauses)
   ->execute();

#UPDATE with statements
$data = [
    'name'  => '?',
    'email' => '?',
];

$statements['data'][] = [1, 'Isis'];
$statements['data'][] = [2, 'isis@email.com'];

$clauses = 'id = ? AND name = ? OR name = ?';

$statements['clauses'][] = [3, 4883];
$statements['clauses'][] = [4, 'Isis'];
$statements['clauses'][] = [5, 'Manny'];

$db->update($data, $statements['data'])
   ->in('test')
   ->where($clauses, $statements['clauses'])
   ->execute();

#Other version of UPDATE with statements
$data = [
    'name'  => ':new_name',
    'email' => ':new_email',
];

$statements['data'][] = [':new_name', 'Manny', 'str'];
$statements['data'][] = [':new_email', 'manny@email.com', 'str'];

$clauses = 'name = :name1 OR name = :name2';

$statements['clauses'][] = [':name1', 'Isis', 'str'];
$statements['clauses'][] = [':name2', 'Manny', 'str'];

$db->update($data, $statements['data'])
   ->in('test')
   ->where($clauses, $statements['clauses'])
   ->execute();
```

REPLACE
-------

[](#replace)

### - Replace a row in a table if it exists or insert a new row if not exist

[](#--replace-a-row-in-a-table-if-it-exists-or-insert-a-new-row-if-not-exist)

```
$db->replace($data, $statements)
   ->from($table)
   ->execute($result);
```

MethodAttributeDescriptionTypeRequiredDefault$dataColumn name and value.arrayYes$statementsStatements.arrayNonullfrom()Set database table name.methodYes$tableTable name.stringYesexecute()Execute query.methodYes$resultQuery result; 'rows', 'id'.stringNo'rows'**\# Return** (int) → rows affected or last row affected ID

```
#REPLACE basic example
$data = [
    'id'    => 3008,
    'name'  => 'Manny',
    'email' => 'manny@email.com',
];

$db->replace($data)
   ->from('test')
   ->execute();

#UPDATE with statements
$data = [
    'id'    => 4889,
    'name'  => ':name',
    'email' => ':email',
];

$statements[] = [':name', 'Manny'];
$statements[] = [':email', 'manny@email.com'];

$db->replace($data, $statements)
   ->from('test')
   ->execute('rows');

#Other version of UPDATE with statements
$data = [
    'id'    => 2,
    'name'  => '?',
    'email' => '?',
];

$statements[] = [1, 'Manny'];
$statements[] = [2, 'manny@email.com'];

$db->replace($data, $statements)
   ->from('test')
   ->execute('id');
```

DELETE
------

[](#delete)

### - DELETE statement

[](#--delete-statement)

```
$db->delete($data, $statements)
   ->from($table)
   ->where($clauses, $statements)
   ->execute();
```

MethodAttributeDescriptionTypeRequiredDefault$dataColumn name and value.arrayYes$statementsStatements.arrayNonullfrom()Set database table name.methodYes$tableTable name.stringYeswhere()Where clauses.methodNo$clausesColumn name and value.mixedYes$statementsStatements.arrayNonullexecute()Execute query.methodYes**\# Return** (int) → rows affected

```
#DELETE all
$db->delete()
   ->from('test')
   ->execute();

#DELETE with WHERE
$clauses = [
    'id = 4884',
    'name  = "isis"',
    'email = "isis@email.com"',
];

$db->delete()
   ->from('test')
   ->where($clauses)
   ->execute();

#DELETE with statements
$clauses = 'id = :id AND name = :name1 OR name = :name2';

$statements[] = [':id', 4885];
$statements[] = [':name1', 'Isis'];
$statements[] = [':name2', 'Manny'];

$db->delete()
   ->from('test')
   ->where($clauses, $statements)
   ->execute();

#Other version of DELETE with statements
$clauses = 'id = :id AND name = :name1 OR name = :name2';

$statements[] = [':id', 4886, 'int'];
$statements[] = [':name1', 'Isis', 'src'];
$statements[] = [':name2', 'Manny', 'src'];

$db->delete()
   ->from('test_table')
   ->where($clauses, $statements)
   ->execute();
```

TRUNCATE TABLE
--------------

[](#truncate-table)

### - TRUNCATE TABLE statement

[](#--truncate-table-statement)

```
$db->truncate()
   ->table($table)
   ->execute();
```

MethodAttributeDescriptionTypeRequiredDefaulttable()Set database table name.methodYes$tableTable name.stringYesexecute()Execute query.methodYes**\# Return** (boolean)

```
$db->truncate()
   ->table('test')
   ->execute();
```

DROP TABLE
----------

[](#drop-table)

### - DROP TABLE statement

[](#--drop-table-statement)

```
$db->drop()
   ->table($table)
   ->execute();
```

MethodAttributeDescriptionTypeRequiredDefaulttable()Set database table name.methodYes$tableTable name.stringYesexecute()Execute query.methodYes**\# Return** (boolean)

```
$db->drop()
   ->table('test')
   ->execute();
```

Quick Start
-----------

[](#quick-start)

To use this class with **Composer**:

```
require __DIR__ . '/vendor/autoload.php';

use Josantonius\Database\Database;
```

Or If you installed it **manually**, use it:

```
require_once __DIR__ . '/Database.php';

use Josantonius\Database\Database;
```

Supported datatypes for prepared statements
-------------------------------------------

[](#supported-datatypes-for-prepared-statements)

### Boolean

[](#boolean)

- bool
- boolean

### Null

[](#null)

- null

### Integer numbers

[](#integer-numbers)

- int
- integer

### Text strings

[](#text-strings)

- str
- string

**If any type of data that does not match the aboves, it will be validated as a string.**

**If no data type is specified, the data type will not be validated in the prepared query.**

Tests
-----

[](#tests)

To run [tests](tests) you just need [composer](http://getcomposer.org/download/) and to execute the following:

```
git clone https://github.com/Josantonius/PHP-Database.git

cd PHP-Database

composer install

```

Run unit tests with [PHPUnit](https://phpunit.de/):

```
composer phpunit

```

Run [PSR2](http://www.php-fig.org/psr/psr-2/) code standard tests with [PHPCS](https://github.com/squizlabs/PHP_CodeSniffer):

```
composer phpcs

```

Run [PHP Mess Detector](https://phpmd.org/) tests to detect inconsistencies in code style:

```
composer phpmd

```

Run all previous tests:

```
composer tests

```

Sponsor
-------

[](#sponsor)

If this project helps you to reduce your development time, [you can sponsor me](https://github.com/josantonius#sponsor) to support my open source work 😊

License
-------

[](#license)

This repository is licensed under the [MIT License](LICENSE).

Copyright © 2017-2022, [Josantonius](https://github.com/josantonius#contact)

###  Health Score

33

—

LowBetter than 75% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity21

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity65

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~42 days

Recently: every ~50 days

Total

12

Last Release

2947d ago

PHP version history (3 changes)1.0.0PHP &gt;=7.0

1.1.0PHP &gt;=5.6

1.1.1PHP ^5.6 || ^7.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/4b221283501ec8a9cbaefaf27821a91ae8ddd33bddf1fccc6c6815b7ad216ff1?d=identicon)[Josantonius](/maintainers/Josantonius)

---

Top Contributors

[![josantonius](https://avatars.githubusercontent.com/u/18104336?v=4)](https://github.com/josantonius "josantonius (58 commits)")

---

Tags

databasedeleteinsertmysqlphpphp-databasesqlphpdatabaseormmysqlmariadbsqlqueryhhvm

###  Code Quality

TestsPHPUnit

Code StylePHP CS Fixer

### Embed Badge

![Health badge](/badges/josantonius-database/health.svg)

```
[![Health](https://phpackages.com/badges/josantonius-database/health.svg)](https://phpackages.com/packages/josantonius-database)
```

###  Alternatives

[ifsnop/mysqldump-php

PHP version of mysqldump cli that comes with MySQL

1.3k5.5M69](/packages/ifsnop-mysqldump-php)[clouddueling/mysqldump-php

PHP version of mysqldump cli that comes with MySQL

1.3k22.9k](/packages/clouddueling-mysqldump-php)[scienta/doctrine-json-functions

A set of extensions to Doctrine that add support for json query functions.

58523.9M36](/packages/scienta-doctrine-json-functions)[druidfi/mysqldump-php

PHP version of mysqldump cli that comes with MySQL

35489.8k6](/packages/druidfi-mysqldump-php)[ramadan/easy-model

A Laravel package for enjoyably managing database queries.

101.6k](/packages/ramadan-easy-model)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
