jpi / database
Simple extension to PDO
Requires
- php: ^7.1 || ^8.0
- ext-pdo: *
Requires (Dev)
- jpi/codestyles: ^1.0
README
Simple extension to PDO with some extra convenient methods including simplified parameter binding and easy data fetching. Fully compatible with standard PDO usage, making it easy to use as a drop-in replacement.
Installation
Use Composer
$ composer require jpi/database
Usage
Initialisation
First, create an instance of the Database class by providing PDO connection parameters:
$connection = new \JPI\Database( "mysql:host=localhost;dbname=your_database", "username", "password" );
Available Methods
Extra Methods:
prep(string, array): PDOStatement: when you want to bind some parameters to a queryrun(string, array): PDOStatement: when you bind some parameters to a query and want to execute itselectAll(string, array): array: for aSELECTquery, returns a multidimensional array of all the rows foundselectFirst(string, array): array|null: for aSELECTquery that hasLIMIT 1, returns an associative array of the first row found (if any)getLastInsertedId(): int|null: helpful after anINSERTquery, returns the ID of the newly inserted row
Overridden Methods:
exec(string, array): int: forINSERT,UPDATEandDELETEqueries, returns the number of rows affected
All methods except getLastInsertedId take the query as the first parameter (required), and an array of params to bind to the query (optional).
Examples:
(Assuming instance has been created and set to a variable named $connection)
prep:
// Prepare a statement with bound parameters (without executing) $statement = $connection->prep( "SELECT * FROM users WHERE email = :email;", ["email" => "jahidul@jahidulpabelislam.com"] ); // You can now execute it later $statement->execute();
run:
// Prepare and execute a query in one step $statement = $connection->run( "SELECT * FROM users WHERE email = :email;", ["email" => "jahidul@jahidulpabelislam.com"] ); // Fetch results from the statement $rows = $statement->fetchAll(PDO::FETCH_ASSOC);
selectAll:
$rows = $connection->selectAll("SELECT * FROM users;"); /** $rows = [ [ "id" => 1, "first_name" => "Jahidul", "last_name" => "Islam", "email" => "jahidul@jahidulpabelislam.com", "password" => "password123", ... ], [ "id" => 2, "first_name" => "Test", "last_name" => "Example", "email" => "test@example.com", "password" => "password123", ... ], ... ]; */
selectFirst:
$row = $connection->selectFirst("SELECT * FROM users LIMIT 1;"); /** $row = [ "id" => 1, "first_name" => "Jahidul", "last_name" => "Islam", "email" => "jahidul@jahidulpabelislam.com", "password" => "password", ... ]; */
exec:
// INSERT $numberOfRowsAffected = $connection->exec( "INSERT INTO users (first_name, last_name, email, password) VALUES (:first_name, :last_name, :email, :password);", [ "first_name" => "Jahidul", "last_name" => "Islam", "email" => "jahidul@jahidulpabelislam.com", "password" => "password", ] ); // UPDATE $numberOfRowsAffected = $connection->exec( "UPDATE users SET first_name = :first_name WHERE id = :id;", [ "id" => 1, "first_name" => "Pabel", ] ); // DELETE $numberOfRowsAffected = $connection->exec("DELETE FROM users WHERE id = :id;", ["id" => 1]);
getLastInsertedId:
// INSERT a new user $connection->exec( "INSERT INTO users (first_name, last_name, email, password) VALUES (:first_name, :last_name, :email, :password);", [ "first_name" => "Jahidul", "last_name" => "Islam", "email" => "jahidul@jahidulpabelislam.com", "password" => "password", ] ); // Get the ID of the newly inserted row $newRowId = $connection->getLastInsertedId(); // $newUserId = 3
Support
If you found this library interesting or useful please spread the word about this library: share on your socials, star on GitHub, etc.
If you find any issues or have any feature requests, you can open a issue or email me @ jahidulpabelislam.com 😏.
Authors
Licence
This module is licensed under the General Public Licence - see the licence file for details.