This repository has been archived on 2023-01-06. You can view files and clone it, but cannot push or open issues or pull requests.
web/app/lib/App/Core/Database.php

39 lines
1.0 KiB
PHP
Raw Normal View History

2022-01-20 21:23:21 +00:00
<?php
2022-03-02 06:15:12 +00:00
namespace App\Core;
2022-04-13 19:22:21 +00:00
use \InvalidArgumentException;
2022-03-02 06:15:12 +00:00
use \PDO;
use \PDOException;
/**
* Encapsulates a single connection to a database.
*/
2022-01-20 21:23:21 +00:00
class Database
{
2022-01-23 21:56:36 +00:00
public PDO $conn;
2022-01-20 21:23:21 +00:00
public function __construct(array $config)
{
2022-01-23 21:56:36 +00:00
if ($config['name'] !== 'mysql')
{
2022-04-13 19:22:21 +00:00
throw new InvalidArgumentException("Database error: driver ".$config['name']." is not implemented");
2022-01-20 21:23:21 +00:00
}
try {
$this->conn = $this->connectWithMySQL($config['args']);
} catch (PDOException $e) {
throw new PDOException("Database error: " . $e->getMessage());
}
}
private function connectWithMySQL(array $args): object
{
2022-01-21 20:16:14 +00:00
$dsn = "mysql:host={$args['host']};dbname={$args['database']};charset={$args['charset']}";
2022-01-20 21:23:21 +00:00
$options = [
PDO::ATTR_PERSISTENT => true,
2022-03-07 06:13:17 +00:00
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION // in PHP 8 and above, this will be the default mode.
2022-01-20 21:23:21 +00:00
];
2022-01-21 20:16:14 +00:00
return new PDO($dsn, $args['user'], $args['password'], $options);
2022-01-20 21:23:21 +00:00
}
}