Update: 2026-08-08 14:57:58
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
/**
|
||||
* db_primary.php — اتصال ثانٍ بالقاعدة الأساسية من خادم الدفع
|
||||
* ─────────────────────────────────────────────────────────────
|
||||
* خادم الدفع يتصل بقاعدته عبر `DB_PAYMENT_*` وحدها (connect.php)، لكن
|
||||
* نقطتين فيه تحتاجان جدولَي `ride` و`driver_orders` وهما في القاعدة
|
||||
* الأساسية. كانتا تشيران إليهما بلا تأهيل فسقطتا بـ
|
||||
* `SQLSTATE[42S02]: Table 'payment.ride' doesn't exist` — وهو ما كان
|
||||
* يُعطّل شاشة رصيد الكابتن بالكامل.
|
||||
*
|
||||
* ولماذا اتصال منفصل لا إشارة مؤهَّلة (`jorSiroDB.ride`)؟
|
||||
*
|
||||
* لأن التأهيل يشترط أن تكون القاعدتان على **نفس خادم MySQL**. وخريطة
|
||||
* `backend/core/Database/Database.php` تُفرد لكل قاعدة host وuser وpass
|
||||
* مستقلة — أي أن الفصل على خوادم مختلفة مفترضٌ في التصميم لا مستبعَد،
|
||||
* وقاعدة الدفع أولى ما يُفصل. إشارة مؤهَّلة تعمل اليوم بالصدفة (حاوية
|
||||
* mysql واحدة) وتسقط صامتةً يوم يُنقل الدفع. الاتصال المنفصل يقرأ
|
||||
* `DB_PRIMARY_HOST_V2` فيتبع القاعدة أينما ذهبت.
|
||||
*/
|
||||
|
||||
if (!function_exists('primaryDbConnection')) {
|
||||
/**
|
||||
* يعيد اتصالاً بالقاعدة الأساسية، أو null إن تعذّر — ولا يرمي أبداً.
|
||||
* المستدعي يقرّر ماذا يفعل عند الغياب؛ في نقاط المحفظة القرار هو
|
||||
* عرض الرصيد بأصفار في الإحصاء لا إسقاط الشاشة.
|
||||
*/
|
||||
function primaryDbConnection(): ?PDO
|
||||
{
|
||||
static $conn = null;
|
||||
static $tried = false;
|
||||
|
||||
if ($tried) {
|
||||
return $conn;
|
||||
}
|
||||
$tried = true;
|
||||
|
||||
$name = getenv('DB_PRIMARY_NAME_V2') ?: getenv('DB_PRIMARY_NAME');
|
||||
$host = getenv('DB_PRIMARY_HOST_V2') ?: getenv('DB_PRIMARY_HOST') ?: 'mysql';
|
||||
$user = getenv('DB_PRIMARY_USER_V2') ?: getenv('DB_PRIMARY_USER');
|
||||
$pass = getenv('DB_PRIMARY_PASS_V2') ?: getenv('DB_PRIMARY_PASS');
|
||||
|
||||
if (empty($name) || empty($user)) {
|
||||
error_log('[db_primary] إعداد القاعدة الأساسية ناقص — تعذّر الاتصال.');
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
$conn = new PDO(
|
||||
"mysql:host=$host;dbname=$name;charset=utf8mb4",
|
||||
$user,
|
||||
$pass,
|
||||
[
|
||||
PDO::ATTR_EMULATE_PREPARES => false,
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
PDO::ATTR_TIMEOUT => 5,
|
||||
]
|
||||
);
|
||||
} catch (PDOException $e) {
|
||||
error_log('[db_primary] تعذّر الاتصال بالقاعدة الأساسية: ' . $e->getMessage());
|
||||
$conn = null;
|
||||
}
|
||||
|
||||
return $conn;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user