79 lines
2.0 KiB
PHP
79 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace WizdomNetworks\WizeWeb\Utils;
|
|
|
|
use PDO;
|
|
use PDOException;
|
|
|
|
/**
|
|
* Database Utility
|
|
*
|
|
* A utility for managing database connections and queries.
|
|
*
|
|
* Integrates logging for connection status and query execution.
|
|
*/
|
|
class Database
|
|
{
|
|
/**
|
|
* @var PDO|null The PDO instance for database connection.
|
|
*/
|
|
private ?PDO $connection = null;
|
|
|
|
/**
|
|
* Database constructor.
|
|
*
|
|
* Initializes the database connection.
|
|
*/
|
|
public function __construct()
|
|
{
|
|
$this->connect();
|
|
}
|
|
|
|
/**
|
|
* Establishes a connection to the database.
|
|
*/
|
|
private function connect(): void
|
|
{
|
|
$dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8mb4', getenv('DB_HOST'), getenv('DB_NAME'));
|
|
|
|
try {
|
|
$this->connection = new PDO($dsn, getenv('DB_USER'), getenv('DB_PASSWORD'));
|
|
$this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
Logger::info('Database connection established successfully.');
|
|
} catch (PDOException $e) {
|
|
Logger::error('Database connection failed: ' . $e->getMessage());
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Executes a query and returns the result.
|
|
*
|
|
* @param string $query The SQL query to execute.
|
|
* @param array $params Parameters for prepared statements (optional).
|
|
* @return array The query result.
|
|
*/
|
|
public function query(string $query, array $params = []): array
|
|
{
|
|
try {
|
|
$stmt = $this->connection->prepare($query);
|
|
$stmt->execute($params);
|
|
Logger::info('Query executed successfully: ' . $query);
|
|
return $stmt->fetchAll(PDO::FETCH_ASSOC);
|
|
} catch (PDOException $e) {
|
|
Logger::error('Query failed: ' . $query . ' | Error: ' . $e->getMessage());
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Retrieves the PDO connection instance.
|
|
*
|
|
* @return PDO The PDO instance.
|
|
*/
|
|
public function getConnection(): PDO
|
|
{
|
|
return $this->connection;
|
|
}
|
|
}
|