prepare("SELECT COUNT(*) FROM user_referral_codes WHERE referral_code = ?"); $stmt->execute([$code]); if ((int) $stmt->fetchColumn() === 0) { return $code; } } // ‏احتياط: حلقة while اللانهائية الأصلية كانت تُعلّق العامل كاملاً // ‏لو امتلأت مساحة الأكواد. نسقط لكود أطول بدل التعليق. return substr(strtoupper(bin2hex(random_bytes(4))), 0, 8); } } if (!function_exists('ensureReferralCode')) { /** * ‏يعيد كود الدعوة للمستخدم، ويُنشئه إن لم يكن موجوداً. * ‏يعيد null فقط إذا تعذّرت الكتابة (لا يُسقط الطلب). */ function ensureReferralCode(PDO $con, string $userId, string $userType): ?string { $stmt = $con->prepare("SELECT referral_code FROM user_referral_codes WHERE user_id = ? AND user_type = ?"); $stmt->execute([$userId, $userType]); $existing = $stmt->fetchColumn(); if ($existing !== false && $existing !== null && $existing !== '') { return (string) $existing; } try { $newCode = generateUnifiedCode($con); $con->prepare("INSERT INTO user_referral_codes (user_id, user_type, referral_code) VALUES (?, ?, ?)") ->execute([$userId, $userType, $newCode]); return $newCode; } catch (PDOException $e) { // ‏سباق بين طلبين متزامنين: الآخر كتب الصفّ أولاً — نقرأه. $stmt->execute([$userId, $userType]); $raced = $stmt->fetchColumn(); if ($raced !== false && $raced !== null && $raced !== '') { return (string) $raced; } error_log("[referral_code_helper] " . $e->getMessage()); return null; } } }