39030-vm/includes/worlds.php
Flatlogic Bot 6489bf1f14 ai
2026-03-07 04:07:33 +00:00

40 lines
1.5 KiB
PHP

<?php
declare(strict_types=1);
function ensureWorldsTable(): void {
$sql = "CREATE TABLE IF NOT EXISTS worlds (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(120) NOT NULL,
size INT UNSIGNED NOT NULL DEFAULT 16,
world_json MEDIUMTEXT NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_worlds_updated_at (updated_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4";
db()->exec($sql);
}
function listWorlds(int $limit = 10): array {
$stmt = db()->prepare('SELECT id, name, size, updated_at FROM worlds ORDER BY updated_at DESC LIMIT :limit');
$stmt->bindValue(':limit', $limit, PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetchAll();
}
function getWorldById(int $id): ?array {
$stmt = db()->prepare('SELECT id, name, size, world_json, created_at, updated_at FROM worlds WHERE id = :id');
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch();
return $row ?: null;
}
function saveWorld(string $name, string $worldJson, int $size): int {
$stmt = db()->prepare('INSERT INTO worlds (name, size, world_json) VALUES (:name, :size, :world_json)');
$stmt->bindValue(':name', $name);
$stmt->bindValue(':size', $size, PDO::PARAM_INT);
$stmt->bindValue(':world_json', $worldJson);
$stmt->execute();
return (int)db()->lastInsertId();
}