Files

58 lines
1.9 KiB
PHP

<?php
require_once __DIR__ . '/../../includes/config.php';
class Database {
private static ?PDO $pdo = null;
public static function get(): PDO {
if (self::$pdo === null) {
$dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=utf8mb4';
self::$pdo = new PDO($dsn, DB_USER, DB_PASS, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
}
return self::$pdo;
}
public function query(string $sql, array $params = []): PDOStatement {
$stmt = self::get()->prepare($sql);
$stmt->execute($params);
return $stmt;
}
public function fetch(string $sql, array $params = []): ?array {
$row = $this->query($sql, $params)->fetch();
return $row ?: null;
}
public function fetchAll(string $sql, array $params = []): array {
return $this->query($sql, $params)->fetchAll();
}
public function insert(string $table, array $data) {
$columns = implode(', ', array_keys($data));
$placeholders = ':' . implode(', :', array_keys($data));
$this->query("INSERT INTO {$table} ({$columns}) VALUES ({$placeholders})", $data);
return self::get()->lastInsertId();
}
public function update(string $table, array $data, string $where, array $whereParams = []) {
$set = [];
foreach (array_keys($data) as $column) {
$set[] = "{$column} = :{$column}";
}
$sql = "UPDATE {$table} SET " . implode(', ', $set) . " WHERE {$where}";
return $this->query($sql, array_merge($data, $whereParams))->rowCount();
}
}
function db(): Database {
static $instance = null;
if ($instance === null) {
$instance = new Database();
}
return $instance;
}