diff --git a/dashboard.php b/dashboard.php
index 95629bd..679bce3 100644
--- a/dashboard.php
+++ b/dashboard.php
@@ -21,7 +21,7 @@ $totalVotes->execute([$electionId]);
$totalVotes = $totalVotes->fetchColumn();
// Chart Data: Participation per Grade Level
-$gradeStats = $pdo->prepare("SELECT COALESCE(u.grade_level, 'Unknown') as label, COUNT(DISTINCT v.voter_id) as count
+$gradeStats = $pdo->prepare("SELECT COALESCE(u.grade_level::TEXT, 'Unknown') as label, COUNT(DISTINCT v.voter_id) as count
FROM users u JOIN votes v ON u.id = v.voter_id
WHERE v.election_id = ?
GROUP BY u.grade_level ORDER BY u.grade_level");
diff --git a/db/config.php b/db/config.php
index 2c44b7b..4ae292a 100644
--- a/db/config.php
+++ b/db/config.php
@@ -13,7 +13,9 @@ define('SUPABASE_DB_PASS', getenv('SUPABASE_DB_PASS') ?: 'gA82h8K80T5QUAwi'); //
function db() {
static $pdo;
if (!$pdo) {
- if (defined('SUPABASE_DB_PASS') && !empty(SUPABASE_DB_PASS)) {
+ $useSupabase = defined('SUPABASE_DB_PASS') && !empty(SUPABASE_DB_PASS);
+
+ if ($useSupabase && extension_loaded('pdo_pgsql')) {
// Use Supabase PostgreSQL
$host = 'aws-1-ap-southeast-1.pooler.supabase.com';
$port = '6543';
@@ -24,20 +26,36 @@ function db() {
$pdo = new PDO("pgsql:host=$host;port=$port;dbname=$dbname", $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
+ PDO::ATTR_TIMEOUT => 5, // Short timeout for faster fallback
]);
- } catch (PDOException $e) {
- // Fallback to local MariaDB if PostgreSQL fails
- $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8mb4', DB_USER, DB_PASS, [
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
- PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
- ]);
+ return $pdo;
+ } catch (PDOException $pgException) {
+ // Keep the error to report it if the fallback also fails
}
- } else {
- // Use local MariaDB
+ }
+
+ // Fallback to local MariaDB/MySQL
+ try {
$pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8mb4', DB_USER, DB_PASS, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
+ } catch (PDOException $mysqlException) {
+ if (!extension_loaded('pdo_pgsql')) {
+ die("Connection failed: The 'pdo_pgsql' extension is not enabled in your PHP configuration, and the local MySQL connection also failed.
MySQL Error: " . $mysqlException->getMessage());
+ }
+
+ $errorMsg = "
DB_USER and DB_PASS in db/config.php to match your XAMPP settings (usually 'root' and empty password).extension=pdo_pgsql is uncommented in php.ini AND you have restarted Apache.