2017 © Pedro Peláez
 

library simple-dbal

image

bentools/simple-dbal

  • Tuesday, January 23, 2018
  • by bpolaszek
  • Repository
  • 1 Watchers
  • 1 Stars
  • 163 Installations
  • PHP
  • 1 Dependents
  • 1 Suggesters
  • 0 Forks
  • 0 Open issues
  • 6 Versions
  • 37 % Grown

The README.md

Latest Stable Version License Quality Score Total Downloads, (*1)

SimpleDBAL

A modern wrapper on top of PDO and Mysqli, written in PHP7.1. It aims at exposing the same API regardless of the one your project uses., (*2)

Introduction

PHP offers 2 different APIs to connect to a SQL database: PDO and mysqli (we won't talk about mysql_* functions since they're deprecated). Both do more or less the same thing, but:, (*3)

  • Their API are completely different (different method names and signatures)
  • They both have their own pros and cons.
  • Some features of one are missing in the other.

This library exposes an API that can be used by any of them, transparently, in a more modern approach (OOP, iterators, return types, etc)., (*4)

This also means you can switch from PDO to mysqli and vice-versa without having to rewrite your whole code., (*5)

From my personnal experience, I was used to PDO and was forced to deal with mysqli in another project and it was really messy., (*6)

Overview

use BenTools\SimpleDBAL\Model\Credentials;
use BenTools\SimpleDBAL\Model\SimpleDBAL;

$credentials = new Credentials('localhost', 'user', 'password', 'database');
$cnx         = SimpleDBAL::factory($credentials, SimpleDBAL::PDO);
$query       = "SELECT `id`, `name` FROM guys WHERE created_at > ?";
foreach ($cnx->execute($query, [new DateTime('-1 month')]) as $item) {
    var_dump($item['name']);
}

Additionnal features

  • On-the-fly parameter binding for prepared statements (simply pass an array of arguments after the query)
  • DateTimeInterface objects automatic binding (formats to YYYY-MM-DD HH:ii:ss)
  • Asynchronous queries (Promises)
  • Parallel queries
  • Support for named parameters in prepared statements for mysqli (polyfill with regexps - experimental feature)
  • Can silently reconnect after a lost connection

The Result object

Every query sent to the adapter will return a BenTools\SimpleDBAL\Contract\ResultInterface object., (*7)

For SELECT queries, use the following methods: * $result->asArray() to fetch an array containing the whole resultset * $result->asRow() to fetch the 1st row of the resultset, as an associative array * $result->asList() to fetch the 1st column of the resultset, as a sequential array * $result->asValue() to fetch a single value (i.e the 1st column of the 1st row) * foreach ($result as $row) to iterate over the resultset (uses lazy-loading) * count($result) to return the number of rows of the resultset., (*8)

For INSERT / UPDATE / DELETE queries, use the following methods: * count($result) to return the number of affected rows * $result->getLastInsertId() to get the id of the last inserted row or sequence value., (*9)

Installation

composer require bentools/simple-dbal

Tests

./vendor/bin/phpunit

Documentation

Getting started, (*10)

Configuring auto-reconnect, (*11)

Asynchronous and parallel queries, (*12)

Connection pools, (*13)

Known Issues, (*14)

The Versions