PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, // ป้องกัน SQL Injection 100% PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci", ]; $conn = new PDO($dsn, $db_user, $db_pass, $options); // ตั้งค่า Timezone ของ MySQL ให้ตรงกับเวลาประเทศไทย (+07:00) $conn->exec("SET time_zone = '+07:00';"); return $conn; } catch (PDOException $e) { error_log("Database Connection Error: " . $e->getMessage()); $isApi = (strpos($_SERVER['REQUEST_URI'] ?? '', '/api/') !== false) || (strpos($_SERVER['REQUEST_URI'] ?? '', 'api=') !== false) || (strpos($_SERVER['HTTP_ACCEPT'] ?? '', 'application/json') !== false) || isset($_GET['api']) || isset($_GET['endpoint']); if ($isApi) { if (!headers_sent()) { header('Content-Type: application/json; charset=utf-8'); http_response_code(500); } echo json_encode([ 'success' => false, 'status_code' => 500, 'error' => [ 'message' => 'ไม่สามารถเชื่อมต่อฐานข้อมูล MySQL ได้: ' . $e->getMessage(), 'hint' => 'กรุณาเปิดโปรแกรม XAMPP Control Panel กด Start ที่ MySQL หรือตรวจสอบการตั้งค่าใน config/connection.php' ] ], JSON_UNESCAPED_UNICODE); exit(); } // แสดงหน้าจอแจ้งเตือนที่สวยงาม ชัดเจน และเข้าใจง่าย แทนที่จะเป็น HTTP 500 หน้าขาว (สำหรับหน้าเว็บปกติ) if (php_sapi_name() !== 'cli') { if (!headers_sent()) { header('Content-Type: text/html; charset=utf-8'); http_response_code(500); } echo "ข้อผิดพลาดในการเชื่อมต่อฐานข้อมูล"; echo ""; echo "

❌ ไม่สามารถเชื่อมต่อฐานข้อมูล MySQL ได้

"; echo "

ระบบไม่สามารถเชื่อมต่อกับฐานข้อมูล {$db_name} ที่โฮสต์ {$db_host}:{$db_port} ได้ กรุณาตรวจสอบตามขั้นตอนดังนี้:

"; echo "
    "; echo "
  1. เปิดโปรแกรม XAMPP Control Panel และกดปุ่ม Start ที่บริการ MySQL
  2. "; echo "
  3. เข้าไปที่ phpMyAdmin (http://localhost/phpmyadmin) ตรวจสอบว่าได้สร้างฐานข้อมูลชื่อ {$db_name} และ Import ไฟล์ database/schema.sql แล้วหรือไม่
  4. "; echo "
  5. หากท่านมีการตั้งรหัสผ่าน MySQL ใน XAMPP กรุณาแก้ไขตัวแปร \$db_pass ในไฟล์ config/connection.php ให้ถูกต้อง
  6. "; echo "
"; echo "
รายละเอียดข้อผิดพลาด:
" . htmlspecialchars($e->getMessage()) . "
"; echo "
"; exit(); } throw $e; }