Файл: new_top/core/classes/Database.php
Строк: 73
<?php
/**
* Simple PDO wrapper
*/
declare(strict_types=1);
class Database
{
private static ?PDO $pdo = null;
public static function init(PDO $pdo): void
{
self::$pdo = $pdo;
}
public static function pdo(): PDO
{
if (self::$pdo === null) {
throw new RuntimeException('Database not initialized');
}
return self::$pdo;
}
public static function query(string $sql, array $params = []): PDOStatement
{
$stmt = self::pdo()->prepare($sql);
$stmt->execute($params);
return $stmt;
}
public static function fetch(string $sql, array $params = []): ?array
{
$row = self::query($sql, $params)->fetch();
return $row === false ? null : $row;
}
public static function fetchAll(string $sql, array $params = []): array
{
return self::query($sql, $params)->fetchAll();
}
public static function fetchColumn(string $sql, array $params = [])
{
return self::query($sql, $params)->fetchColumn();
}
public static function insert(string $table, array $data): int
{
if (!preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $table)) {
throw new InvalidArgumentException('Invalid table name');
}
$cols = array_keys($data);
foreach ($cols as $col) {
if (!preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $col)) {
throw new InvalidArgumentException('Invalid column name');
}
}
$placeholders = array_map(function ($c) { return ':' . $c; }, $cols);
$sql = sprintf(
'INSERT INTO `%s` (`%s`) VALUES (%s)',
$table,
implode('`,`', $cols),
implode(',', $placeholders)
);
self::query($sql, $data);
return (int) self::pdo()->lastInsertId();
}
public static function update(string $table, array $data, string $where, array $whereParams = []): int
{
if (!preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $table)) {
throw new InvalidArgumentException('Invalid table name');
}
$set = [];
foreach (array_keys($data) as $col) {
$set[] = "`{$col}` = :{$col}";
}
$sql = sprintf('UPDATE `%s` SET %s WHERE %s', $table, implode(', ', $set), $where);
$stmt = self::query($sql, array_merge($data, $whereParams));
return $stmt->rowCount();
}
}