mirror of
https://github.com/myronblair/do-server-config
synced 2026-07-27 21:18:32 -05:00
58 lines
1.9 KiB
PHP
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;
|
|
}
|