78 lines
5.8 KiB
PHP
78 lines
5.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* TTMQMS Enterprise - Standard Database Connection File
|
|
* ไฟล์เชื่อมต่อฐานข้อมูลปกติ (จัดเก็บในโฟลเดอร์ config/)
|
|
*
|
|
* ท่านสามารถตั้งค่า Host, Username, Password และชื่อฐานข้อมูล (Database Name)
|
|
* ของ XAMPP / MAMP / MySQL Server ได้โดยตรงที่ไฟล์นี้
|
|
*/
|
|
|
|
$db_host = '127.0.0.1'; // หรือ 'localhost'
|
|
$db_port = '3306'; // พอร์ต MySQL ของ XAMPP (ค่าเริ่มต้นคือ 3306)
|
|
$db_name = 'ttm_system'; // ชื่อฐานข้อมูล (ตามที่ Import จากไฟล์ database/schema.sql)
|
|
$db_user = 'root'; // ชื่อผู้ใช้ MySQL (ค่าเริ่มต้นของ XAMPP คือ root)
|
|
$db_pass = '@Samui@1074200'; // รหัสผ่าน MySQL (ค่าเริ่มต้นของ XAMPP คือว่างเปล่า "")
|
|
|
|
try {
|
|
$dsn = "mysql:host={$db_host};port={$db_port};dbname={$db_name};charset=utf8mb4";
|
|
|
|
$options = [
|
|
PDO::ATTR_ERRMODE => 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 "<!DOCTYPE html><html lang='th'><head><meta charset='UTF-8'><meta name='viewport' content='width=device-width, initial-scale=1.0'><title>ข้อผิดพลาดในการเชื่อมต่อฐานข้อมูล</title>";
|
|
echo "<style>body{font-family:'Segoe UI',Tahoma,sans-serif;background:#0f172a;color:#f8fafc;display:flex;justify-content:center;align-items:center;min-height:100vh;margin:0;padding:20px;box-sizing:border-box;}.card{background:#1e293b;border:1px solid #ef4444;border-radius:20px;padding:36px;max-width:580px;width:100%;box-shadow:0 15px 30px rgba(0,0,0,0.6);}h2{color:#f87171;margin-top:0;display:flex;align-items:center;gap:12px;font-size:1.5rem;}code{background:#334155;padding:3px 8px;border-radius:6px;color:#38bdf8;font-weight:600;}ol{line-height:1.8;padding-left:20px;margin:20px 0;}li{margin-bottom:8px;}.error-box{background:#020617;padding:16px;border-radius:10px;overflow-x:auto;color:#fca5a5;border:1px solid #334155;font-family:monospace;font-size:0.9rem;margin-top:16px;}</style></head>";
|
|
echo "<body><div class='card'><h2>❌ ไม่สามารถเชื่อมต่อฐานข้อมูล MySQL ได้</h2>";
|
|
echo "<p>ระบบไม่สามารถเชื่อมต่อกับฐานข้อมูล <code>{$db_name}</code> ที่โฮสต์ <code>{$db_host}:{$db_port}</code> ได้ กรุณาตรวจสอบตามขั้นตอนดังนี้:</p>";
|
|
echo "<ol>";
|
|
echo "<li>เปิดโปรแกรม <strong>XAMPP Control Panel</strong> และกดปุ่ม <strong>Start</strong> ที่บริการ <strong>MySQL</strong></li>";
|
|
echo "<li>เข้าไปที่ phpMyAdmin (<code>http://localhost/phpmyadmin</code>) ตรวจสอบว่าได้สร้างฐานข้อมูลชื่อ <code>{$db_name}</code> และ Import ไฟล์ <code>database/schema.sql</code> แล้วหรือไม่</li>";
|
|
echo "<li>หากท่านมีการตั้งรหัสผ่าน MySQL ใน XAMPP กรุณาแก้ไขตัวแปร <code>\$db_pass</code> ในไฟล์ <strong>config/connection.php</strong> ให้ถูกต้อง</li>";
|
|
echo "</ol>";
|
|
echo "<div class='error-box'><strong>รายละเอียดข้อผิดพลาด:</strong><br>" . htmlspecialchars($e->getMessage()) . "</div>";
|
|
echo "</div></body></html>";
|
|
exit();
|
|
}
|
|
throw $e;
|
|
}
|