1. Go to this page and download the library: Download alejoluc/lazypdo library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
alejoluc / lazypdo example snippets
// autoloading, etc.
use alejoluc\LazyPDO\LazyPDO;
function expectsPDO(PDO $dependency) {
//...
}
$lazypdo = new LazyPDO('mysql:host=localhost;dbname=db;charset=utf8', 'root', 'root');
expectsPDO($lazypdo); // Valid
// autoload, etc....
use alejoluc\LazyPDO\LazyPDO;
$pdo = new LazyPDO('mysql:host=localhost;dbname=db;charset=utf8', 'not_a_valid_user', 'pass');
$pdo->onConnectionError(function($ex) use ($app){
$error = $ex->getMessage();
$app->logError('PDO reported an error: ' . $error);
$app->getDevelopers->angryEmail($error);
$app->redirect('/database-maintenance');
$app->shutdown();
});
$stmt = $pdo->prepare('SELECT ...'); // This will attempt a connection, the connection will fail, and the previously defined callback will handle the raised PDOException.
// joluc\LazyPDO\LazyPDO;
$pdo = new LazyPDO('mysql:host=localhost;dbname=information_schema;charset=utf8', 'root', 'root', [
LazyPDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
// This will fail, there is no CHARACTER_SET table. To test the success scenario, change it to CHARACTER_SETS
$stmt = $pdo->prepare('SELECT * FROM CHARACTER_SET WHERE DEFAULT_COLLATE_NAME = ?');
if ($stmt === false) { // With this error mode, you must manually check errors
$error = $pdo->errorInfo()[2];
echo "Database error: $error";
die();
}
$stmt->bindValue(1, 'utf8_general_ci');
$stmt->execute();
var_dump($stmt->fetchAll());
// joluc\LazyPDO\LazyPDO;
$pdo = new LazyPDO('mysql:host=localhost;dbname=information_schema;charset=utf8', 'root', 'root', [
PDO::ATTR_ERRMODE => LazyPDO::ERRMODE_EXCEPTION,
LazyPDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
try {
// This will fail, there is no CHARACTER_SET table. To test the success scenario, change it to CHARACTER_SETS
$stmt = $pdo->prepare('SELECT * FROM CHARACTER_SET WHERE DEFAULT_COLLATE_NAME = ?');
$stmt->bindValue(1, 'utf8_general_ci');
$stmt->execute();
var_dump($stmt->fetchAll());
} catch (PDOException $e) {
echo "Database error: " . $e->getMessage();
die();
}
// autoload, instantiate a pimple container into $c, store an hypothetical caching server connection into it, etc.
$c['db'] = function(){
return new PDO('....');
};
function getUserData($userId, $db, $cacheConnection) {
if ($cacheConnection->inCache('user:' . $userId)) {
return $cacheConnection->getCached('user:' . $userId);
} else {
$stmt = $db->prepare('SELECT ...');
// and so on and so on
}
}
$data = getUserData('admin', $c['db'], $c['cache']); // You are accessing the 'db' key inside the Container, and a connection will try to be established because of that, although you can see in the getUserData() definition that no connection may be needed at all.
function getUserData($userId, $c) {
if ($c['cache']->inCache('user:' . $userId)) {
return $c['cache']->getCached('user:' . $userId);
} else {
$stmt = $c['db']->prepare('SELECT ...'); // PDO instantiation happens here, so it will not happen if the data is cached
// and so on and so on
}
}
getUserData('admin', $c);
// autoload, instantiate a pimple container into $c, store an hypothetical caching server connection into it, etc.
use alejoluc\LazyPDO\LazyPDO;
$c['db'] = function(){
return new LazyPDO('....');
};
function getUserData($userId, $db, $cacheConnection) {
if ($cacheConnection->inCache('user:' . $userId)) {
return $cacheConnection->getCached('user:' . $userId);
} else {
$stmt = $db->prepare('SELECT ...'); // The connection will try to be established here, not on the getUserData() function call
}
}
$data = getUserData('admin', $c['db'], $c['cache']); // No connection to the database will try to be established here because $c['db'] will return an instance of LazyPDO
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.