pdo->prepare('SELECT v, updated_at FROM move_app_state WHERE k = ?'); $st->execute([$key]); $row = $st->fetch(); if ($row === false) return null; return ['value' => (string)$row['v'], 'updated_at' => (int)$row['updated_at']]; } public function set(string $key, string $value, int $now): void { // upsert 문법이 엔진마다 다르다. sqlite 통합 테스트가 납품되는 실제 SQL 을 돌리므로 // 둘 다 맞아야 한다 — MySQL 은 ON DUPLICATE KEY, sqlite 는 ON CONFLICT. $mysql = $this->pdo->getAttribute(PDO::ATTR_DRIVER_NAME) !== 'sqlite'; $sql = $mysql ? 'INSERT INTO move_app_state (k, v, updated_at) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE v = VALUES(v), updated_at = VALUES(updated_at)' : 'INSERT INTO move_app_state (k, v, updated_at) VALUES (?, ?, ?) ON CONFLICT(k) DO UPDATE SET v = excluded.v, updated_at = excluded.updated_at'; $this->pdo->prepare($sql)->execute([$key, $value, $now]); } }