rework to change from MySQLi to PDO.

This commit is contained in:
kj
2022-07-14 21:41:48 -04:00
parent afb4c914a1
commit 0db6e4a021
4 changed files with 277 additions and 195 deletions

View File

@ -2,9 +2,9 @@
/**
* Database - DuckBrain
*
* Clase diseñada para crear y devolver una única instancia mysqli (database).
* Clase diseñada para crear y devolver una única instancia PDO (database).
* Depende de manera forzada de que estén definidas las constantes:
* dbhost, dbname, dbpass y dbuser
* DB_TYPE, DB_NAME, DB_HOST, DB_USER. DB_PASS
*
* @author KJ
* @website https://kj2.me
@ -12,25 +12,33 @@
*/
namespace Libs;
use mysqli;
class Database extends \mysqli {
static private $db;
use PDO;
use PDOException;
use Exception;
class Database extends PDO {
static private ?PDO $db = null;
private function __construct() {}
/**
* Devuelve una instancia homogénea (singlenton) a la base de datos.
* Devuelve una instancia homogénea (singlenton) de la base de datos (PDO).
*
* @return mysqli
* @return PDO
*/
static public function getConnection() : mysqli {
if (!isset(self::$db)) {
self::$db = new mysqli(dbhost, dbuser, dbpass, dbname);
if (self::$db->connect_errno) {
echo '<style>body{white-space: pre-line;}</style>';
throw new \Exception('No se ha podido conectar a la base de datos.');
static public function getInstance() : PDO {
if (is_null(self::$db)) {
$dsn = DB_TYPE.':dbname='.DB_NAME.';host='.DB_HOST;
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()
);
}
self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return self::$db;
}