Simba, предлагаю немного ускорить checker. Во-первых, если в нике присутствуют недопустимые символы, нет нужды лезть после этого в базу. Во-вторых, SELECT COUNT(*) будет немного быстрее, так как не придётся запрашивать все поля у юзера.
Код (+/-)
if (preg_match('/[^\da-z\-\@\*\(\)\?\!\~\_\=\[\]]+/', $lat_nick)) {
exit(json_encode(['login' => _t('Invalid characters')]));
}
// Проверка, занят ли ник
$stmt = $db->prepare('SELECT COUNT(*) FROM `users` WHERE `name_lat` = ?');
$stmt->execute([$lat_nick]);
if ($stmt->fetchColumn()) {
exit(json_encode(['login' => _t('Selected Nickname is already in use')]));
}
// Всё ok
exit(json_encode([]));