eclipxe / engineworks-dbal
PHP Database Abstraction Layer
Installs: 1 091
Dependents: 2
Suggesters: 1
Security: 0
Stars: 2
Watchers: 2
Forks: 1
Open Issues: 0
Requires (Dev)
- ext-mysqli: *
- ext-pdo: *
- ext-simplexml: *
- ext-sqlite3: *
- fakerphp/faker: ^1.14
- phpunit/phpunit: ^9.5
- vlucas/phpdotenv: ^3.6
Suggests
- ext-PDO: Needed to run drivers that depends on PDO (pdo_sqlsrv & pdo_dblib)
- ext-mysqli: Needed to run \EngineWorks\DBAL\Mysqli driver
- ext-pdo_dblib: Needed to run \EngineWorks\DBAL\Mssql driver
- ext-pdo_sqlsrv: Needed to run \EngineWorks\DBAL\Sqlsrv driver
- ext-sqlite3: Needed to run \EngineWorks\DBAL\Sqlite driver
README
I create this library to abstract the interactions with a relational database. At the time it was created the PDO extension did not exist. If possible try to use PDO instead of this library, mostly because prepared statements.
I'm maintaining this library because I have several applications depending on it, and I had shared this to other people, so they can also maintain their own projects.
Installation
To install this library you can use:
composer require eclipxe/engineworks-dbal
Objects
EngineWorks\DBAL\DBAL
Main connection object, has several query methods to get the results just as needed. It also contains sql methods to translate SQL Dialects from different drivers.
EngineWorks\DBAL\Recordset
The Recordset class mimics the main methods of the recordset:
- Open the recordset using an SQL Statement.
- Walk the recordset using the current cursor.
- Access values using the values array, stores original values.
- Use of magic methods Update and Delete.
- Convert from/to database types to common types.
Some drivers do not know how to get the primary keys on a query, in that case you can specify the entity to affect and also the primary keys.
Mysql driver support this feature, it will check for primary keys, auto incrementing fields or unique indexes.
EngineWorks\DBAL\Pager
The Pager class uses Recordset to access a limited page of a query, it does not load all the records but only the requested ones
About drivers
This library supports Mysqli, Mssql, Sqlsrv and Sqlite3 drivers, you are free to create your own and (please) share it with me.
Mysqli
- This is the most tested driver on production.
Sqlsrv
- This driver uses Microsoft PHP Driver for SQL Server.
- Result does not know the entity or primary keys of the query. Use overrideEntity and overrideKeys when create a Recordset for update or delete.
Sqlite3
- Result does not know the entity or primary keys of the query. Use overrideEntity and overrideKeys when create a Recordset for update or delete.
- When a result is empty (nothing to fetch) it is not possible to know the type of the fields, this make this driver unstable to update using Recordset.
- The method SQLite3Result::fetchArray put the cursor in the first position when called after end of list. This behavior has been corrected on Result and fetch returns always false.
Mssql
- This driver uses PDO dblib, you will need FreeTDS.
- Result does not know the entity or primary keys of the query. Use overrideEntity and overrideKeys when create a Recordset for update or delete.
- The function to quote (PDO::quote) fail with multibyte strings, we are
using simple replacements of
'
to''
- This driver is not really compatible with PHP 7, use Sqlsrv instead
Compatibility
This class will be compatible according to PHP Supported versions.
Contributing
Contributions are welcome! Please read CONTRIBUTING for details and don't forget to take a look in the files TODO and CHANGELOG.
License
The eclipxe/engineworks-dbal
library is copyright © Carlos C Soto
and licensed for use under the MIT License (MIT). Please see LICENSE for more information.