<?php
namespace App\Core;
use \InvalidArgumentException;
use \PDO;
use \PDOException;
/**
* Encapsulates a single connection to a database.
*/
class Database
{
public PDO $conn;
public function __construct(array $config)
if ($config['name'] !== 'mysql')
throw new InvalidArgumentException("Database error: driver ".$config['name']." is not implemented");
}
try {
$this->conn = $this->connectWithMySQL($config['args']);
} catch (PDOException $e) {
throw new PDOException("Database error: " . $e->getMessage());
private function connectWithMySQL(array $args): object
$dsn = "mysql:host={$args['host']};dbname={$args['database']};charset={$args['charset']}";
$options = [
PDO::ATTR_PERSISTENT => true,
];
return new PDO($dsn, $args['user'], $args['password'], $options);