setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $pdo->exec('PRAGMA foreign_keys = ON'); $pdo->exec('PRAGMA journal_mode = WAL'); if ($isNew) { $pdo->exec(file_get_contents(__DIR__ . '/db.sql')); } } return $pdo; } function dbAll(string $sql, array $params = []): array { $stmt = db()->prepare($sql); $stmt->execute($params); return $stmt->fetchAll(); } function dbOne(string $sql, array $params = []): ?array { $stmt = db()->prepare($sql); $stmt->execute($params); $row = $stmt->fetch(); return $row === false ? null : $row; } function dbExec(string $sql, array $params = []): void { $stmt = db()->prepare($sql); $stmt->execute($params); } function dbInsert(string $table, array $data): int { $cols = array_keys($data); $sql = 'INSERT INTO ' . $table . ' (' . implode(',', $cols) . ') VALUES (' . implode(',', array_map(fn($c) => ':' . $c, $cols)) . ')'; dbExec($sql, $data); return (int) db()->lastInsertId(); } function dbLastId(): int { return (int) db()->lastInsertId(); }