Code Monkey home page Code Monkey logo

pdo-plus's Introduction

PDO plus

Codacy Badge Coverage Status

PDO plus extends PDO in order to log all your queries. This package also includes a Bar Panel for Tracy (useful for legacy projects), see the result below.

PDO logger with Tracy

Versions

Release Supported PHP versions
4.x.x / master (here now) 8.0
3.x.x 7.2, 7.3, 7.4

Installation

Install via composer:

composer require filisko/pdo-plus

How to use

In this example we are using two different PDO instances just to show that it's doable.

// Create an instance using PDO plus
$pdoConnection1 = new \Filisko\PDOplus\PDO('mysql:host=127.0.0.1;dbname=my_db', 'my_user', 'my_pass');
$pdoConnection2 = new \Filisko\PDOplus\PDO('mysql:host=127.0.0.1;dbname=my_other_db', 'my_user', 'my_pass');

// ... our SQL queries ...

// Dump logged queries of PDO connection 1
var_dump($pdoConnection1->getLog());

// --- the following code shows how to integrate with Tracy debugger

// Instance for Tracy BarPanel for connection 1
$db1Panel = new \Filisko\PDOplus\Tracy\BarPanel($pdoConnection1);
$db1Panel->title = "DB 1 Panel";

// Instance for Tracy BarPanel for connection 2
$db2Panel = new \Filisko\PDOplus\Tracy\BarPanel($pdoConnection2);
$db2Panel->title = "DB 2 Panel";

// Enables Tracy debugger and adds panels for each connection (easy to integrate with legacy apps!)
\Tracy\Debugger::enable();
\Tracy\Debugger::getBar()->addPanel($db1Panel);
\Tracy\Debugger::getBar()->addPanel($db2Panel);

Tests

Run tests:

composer run-script test

pdo-plus's People

Contributors

filisko avatar jpxd avatar levinside avatar patrickkusebauch avatar woytam avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

pdo-plus's Issues

Execute() binding is too "aggressive"

Log from function execute with prepared statement is too aggressive with trying to bind values.
Ex.

$pdo->prepare('SELECT * FROM `db0`.`table` WHERE user = ?');
$pdo->execute(['John']);

will be logged as

SELECT * FROM `dbJohn`.`table` WHERE id = ?

See db0 changed to dbJohn. Problem is in PDOStatement.php#L89 where is missing control, if $input_parameters are array of values or array of named params. Array of values have numerical indexes from 0.

I will make PR inspired from comment on PHP.net.

Time is not in ms

Time shown on bar and panel are not in ms. microtime(true) returns current Unix timestamp with microseconds. Timestamp is in seconds.

PHP8 compatibility

When using this library in PHP8, the following error occurs:

Declaration of Filisko\PDOplus\PDO::query($statement, $mode = Filisko\PDOplus\PDO::ATTR_DEFAULT_FETCH_MODE, $arg3 = null, array $ctorargs = []) must be compatible with PDO::query(string $query, ?int $fetchMode = null, mixed ...$fetchModeArgs)

This can easily be fixed by changing the signature to the new one, but probably breaks this library for PHP7.
I don't know wether the two implementations can coexist.

I think a new major version of pdo-plus which is compatible with PHP8 might be the best option. This way we don't break older projects which often only get minor and patch version updates.
PHP7.4 only has active support for 7 months left, so most new projects will be using PHP8 since it is the current stable version.

See this link for the official PHP version support: https://www.php.net/supported-versions.php

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.