20) { $error = '用户名长度3-20个字符'; } elseif (strlen($password) < 6) { $error = '密码长度至少6位'; } elseif ($password !== $confirm) { $error = '两次密码输入不一致'; } else { // 检查用户名是否已存在 $stmt = $pdo->prepare('SELECT id FROM users WHERE username = ?'); $stmt->execute([$username]); if ($stmt->fetch()) { $error = '用户名已存在'; } else { $pdo->beginTransaction(); try { // 验证邀请码(次数校验:未超限 或 不限次数) $stmt = $pdo->prepare("SELECT id, max_uses, used_count FROM invite_codes WHERE code = ? AND (used_count < max_uses OR max_uses = 0) FOR UPDATE"); $stmt->execute([$invite]); $ic = $stmt->fetch(); if (!$ic) { $error = '邀请码无效或已超出使用次数'; $pdo->rollBack(); } else { $hash = password_hash($password, PASSWORD_DEFAULT); $stmt = $pdo->prepare('INSERT INTO users (username, password) VALUES (?, ?)'); $stmt->execute([$username, $hash]); // 增加邀请码使用次数 $stmt = $pdo->prepare('UPDATE invite_codes SET used_count = used_count + 1 WHERE id = ?'); $stmt->execute([$ic['id']]); $pdo->commit(); redirect('login.php'); } } catch (Exception $e) { $pdo->rollBack(); $error = '注册失败,请重试'; } } } } ?>