duckbrain/src/Libs/Database.php

59 lines
1.6 KiB
PHP
Raw Normal View History

2020-03-08 04:37:19 +01:00
<?php
/**
* Database - DuckBrain
2021-10-22 05:34:49 +02:00
*
2022-07-15 03:41:48 +02:00
* Clase diseñada para crear y devolver una única instancia PDO (database).
2022-08-04 11:30:22 +02:00
* Hace uso de las siguientes constantes:
* DB_TYPE, DB_NAME, DB_HOST, DB_USER, DB_PASS
*
* Si DB_TYPE es sqlite, usará DB_NAME como el nombre del archivo sqlite.
* Además DB_USER y DB_PASS, no será necesariop que estén definidos.
2021-10-22 05:34:49 +02:00
*
* @author KJ
* @website https://kj2.me
* @licence MIT
2021-10-22 05:34:49 +02:00
*/
2020-03-17 18:46:16 +01:00
2020-03-08 04:37:19 +01:00
namespace Libs;
2022-07-15 03:41:48 +02:00
use PDO;
use PDOException;
use Exception;
class Database extends PDO {
static private ?PDO $db = null;
2021-10-22 05:34:49 +02:00
private function __construct() {}
/**
2022-07-15 03:41:48 +02:00
* Devuelve una instancia homogénea (singlenton) de la base de datos (PDO).
*
2022-07-15 03:41:48 +02:00
* @return PDO
*/
2022-07-15 03:41:48 +02:00
static public function getInstance() : PDO {
if (is_null(self::$db)) {
2022-08-04 11:30:22 +02:00
if (DB_TYPE == 'sqlite') {
$dsn = DB_TYPE .':'. DB_NAME;
!defined('DB_USER') && define('DB_USER', '');
!defined('DB_PASS') && define('DB_PASS', '');
} else
$dsn = DB_TYPE.':dbname='.DB_NAME.';host='.DB_HOST;
2022-07-15 03:41:48 +02:00
try {
self::$db = new PDO($dsn, DB_USER, DB_PASS);
} catch (PDOException $e) {
echo "<pre>";
throw new Exception(
'Error at connect to database: ' . $e->getMessage()
);
2021-10-22 05:34:49 +02:00
}
2022-08-04 11:30:22 +02:00
2022-07-15 03:41:48 +02:00
self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
2022-07-24 06:29:34 +02:00
self::$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
2021-10-22 05:34:49 +02:00
}
return self::$db;
2020-03-08 04:37:19 +01:00
}
}
?>