diff --git a/php/api.php b/php/api.php index cc57e74..377b534 100644 --- a/php/api.php +++ b/php/api.php @@ -45,7 +45,7 @@ switch ($action) { case 'set_name': { $body = read_json_body(); - $name = trim(mb_substr((string)($body['name'] ?? ''), 0, 40)); + $name = trim(substr((string)($body['name'] ?? ''), 0, 40)); if ($name === '') { http_response_code(400); echo json_encode(['error' => 'empty name']); break; } $u = current_user($pdo); if ($u) { @@ -102,10 +102,14 @@ switch ($action) { // UNIQUE(level_name, move_key) — та же последовательность уже есть, не ошибка } - // держим только топ-5 по числу ходов на уровень + // держим только топ-5 по числу ходов на уровень. MariaDB не даёт + // LIMIT прямо внутри NOT IN(...) (ошибка 1235) — оборачиваем + // подзапрос ещё одним SELECT (derived table), это разрешено. $pdo->prepare(' DELETE FROM solutions WHERE level_name = ? AND id NOT IN ( - SELECT id FROM solutions WHERE level_name = ? ORDER BY move_count ASC LIMIT 5 + SELECT id FROM ( + SELECT id FROM solutions WHERE level_name = ? ORDER BY move_count ASC LIMIT 5 + ) AS keep_ids ) ')->execute([$level, $level]); diff --git a/php/index.php b/php/index.php index df8d5ca..ed46e73 100644 --- a/php/index.php +++ b/php/index.php @@ -4,6 +4,7 @@