David Grudl Miloslav Hůla Miroslav Paulík Radovan Kepák Jan Rössler Daniel Kouba Aleš Culek Jakub Krčma Jiří Chadima Petr Procházka Ondrej Brablc Jan Tvrdík Ondřej Mirtes Filip Procházka Roman Sklenar Jan Vlcek hubipe soukicz Emmanuel Milan Pála Jáchym Toušek jasir Vlasta Neubauer Martin Vseticka

See all contributors


Dibi - smart database layer for PHP Buy me a coffee

Downloads this Month Build Status Build Status Windows Latest Stable Version License

Database access functions in PHP are not standardised. This library hides the differences between them, and above all, it gives you a very handy interface.


The best way how to install Dibi is to download a latest package or use a Composer:

composer require dibi/dibi

The Dibi 3 requires PHP version 5.4.4 or newer (is compatible with PHP 7.0 and 7.1), version 4 requires PHP 7.1.


Refer to the examples directory for examples. Dibi documentation is available on the homepage.

Connect to database:

// connect to database (static way)
    'driver'   => 'mysql',
    'host'     => 'localhost',
    'username' => 'root',
    'password' => '***',

// or object way; in all other examples use $connection-> instead of dibi::
$connection = new DibiConnection($options);


dibi::query('SELECT * FROM users WHERE id = ?', $id);

$arr = [
    'name' => 'John',
    'is_admin'  => true,
dibi::query('INSERT INTO users', $arr);
// INSERT INTO users (`name`, `is_admin`) VALUES ('John', 1)

dibi::query('UPDATE users SET', $arr, 'WHERE `id`=?', $x);
// UPDATE users SET `name`='John', `is_admin`=1 WHERE `id` = 123

dibi::query('UPDATE users SET', [
	'title' => array('SHA1(?)', 'tajneheslo'),
// UPDATE users SET 'title' = SHA1('tajneheslo')

Getting results

$result = dibi::query('SELECT * FROM users');

$value = $result->fetchSingle(); // single value
$all = $result->fetchAll(); // all rows
$assoc = $result->fetchAssoc('id'); // all rows as associative array
$pairs = $result->fetchPairs('customerID', 'name'); // all rows as key => value pairs

// iterating
foreach ($result as $n => $row) {

Modifiers for arrays:

dibi::query('SELECT * FROM users WHERE %and', [
	array('number > ?', 10),
	array('number < ?', 100),
// SELECT * FROM users WHERE (number > 10) AND (number < 100)
%and `[key]=val AND [key2]="val2" AND ...`
%or `[key]=val OR [key2]="val2" OR ...`
%a assoc `[key]=val, [key2]="val2", ...`
%l %in list `(val, "val2", ...)`
%v values `([key], [key2], ...) VALUES (val, "val2", ...)`
%m multivalues `([key], [key2], ...) VALUES (val, "val2", ...), (val, "val2", ...), ...`
%by ordering `[key] ASC, [key2] DESC ...`
%n identifiers `[key], [key2] AS alias, ...`
other - `val, val2, ...`

Modifiers for LIKE

dibi::query("SELECT * FROM table WHERE name LIKE %like~", $query);
%like~ begins with
%~like ends with
%~like~ contains


dibi::query('UPDATE users SET', [
    'time' => new DateTime,
// UPDATE users SET ('2008-01-01 01:08:10')


echo dibi::$sql; // last SQL query
echo dibi::$elapsedTime;
echo dibi::$numOfQueries;
echo dibi::$totalTime;