⚠️ PHP MySQL Driver Ontbreekt (pdo_mysql)

De extensie pdo_mysql is niet actief in deze PHP-omgeving.

"); } $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_TIMEOUT => 5, ]; if (defined('PDO::MYSQL_ATTR_MULTI_STATEMENTS')) { $options[PDO::MYSQL_ATTR_MULTI_STATEMENTS] = true; } $dsnWithDb = sprintf( 'mysql:host=%s;port=%s;dbname=%s;charset=%s', DB_HOST, DB_PORT, DB_NAME, DB_CHARSET ); // 2. CHECK: Bestaat de database al? // We proberen eerst direct verbinding te maken met de database. // Als de database al bestaat, lukt dit direct zonder database-aanmaakrechten te vereisen! try { $pdo = new PDO($dsnWithDb, DB_USER, DB_PASS, $options); // De database bestaat al! Controleer enkel of de tabellen al aanwezig zijn ensure_tables_exist($pdo); return $pdo; } catch (PDOException $e) { // Foutcode 1049 betekent: Database 'DB_NAME' bestaat nog NIET op de MariaDB server if ($e->getCode() == 1049 || str_contains($e->getMessage(), 'Unknown database')) { // Probeer de database eenmalig aan te maken indien de gebruiker CREATE rechten heeft try { $serverDsn = sprintf('mysql:host=%s;port=%s;charset=%s', DB_HOST, DB_PORT, DB_CHARSET); $serverPdo = new PDO($serverDsn, DB_USER, DB_PASS, $options); $serverPdo->exec(sprintf( 'CREATE DATABASE IF NOT EXISTS `%s` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci', DB_NAME )); // Nu opnieuw verbinden met de nieuw aangemaakte database $pdo = new PDO($dsnWithDb, DB_USER, DB_PASS, $options); ensure_tables_exist($pdo); return $pdo; } catch (PDOException $createEx) { die("

⚠️ Database '" . htmlspecialchars(DB_NAME) . "' bestaat nog niet

De database " . htmlspecialchars(DB_NAME) . " bestaat nog niet op MariaDB server " . htmlspecialchars(DB_HOST) . " en de gebruiker " . htmlspecialchars(DB_USER) . " heeft geen rechten om automatisch databases aan te maken.

Maak de database " . htmlspecialchars(DB_NAME) . " eenmalig aan via phpMyAdmin, HeidiSQL of de MariaDB CLI:

CREATE DATABASE IF NOT EXISTS `" . htmlspecialchars(DB_NAME) . "` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
"); } } // Andere verbindingsfout (bijv. verkeerd wachtwoord, poort of host onbereikbaar) die("

MariaDB Verbindingsfout (" . htmlspecialchars((string)$e->getCode()) . ")

" . htmlspecialchars($e->getMessage()) . "

Host: " . htmlspecialchars(DB_HOST) . "
Poort: " . htmlspecialchars(DB_PORT) . "
Database: " . htmlspecialchars(DB_NAME) . "
Gebruiker: " . htmlspecialchars(DB_USER) . "
"); } } /** * Zorgt ervoor dat alle benodigde tabellen uit schema.sql aanwezig zijn in MariaDB * Voert niets uit als de tabellen al bestaan! */ function ensure_tables_exist(PDO $pdo): void { try { // Controleer of de hoofdtabel 'users' al bestaat $result = $pdo->query("SHOW TABLES LIKE 'users'"); if ($result && $result->rowCount() > 0) { // Tabellen bestaan al! Geen actie nodig. return; } // Tabellen ontbreken nog: voer schema.sql uit statement voor statement $schemaFile = __DIR__ . '/../schema.sql'; if (file_exists($schemaFile)) { $sql = file_get_contents($schemaFile); $statements = array_filter(array_map('trim', explode(';', $sql))); foreach ($statements as $stmt) { // Verwijder eventuele SQL commentaren aan het begin $stmtClean = preg_replace('/^--.*$/m', '', $stmt); $stmtClean = trim($stmtClean); if (!empty($stmtClean)) { $pdo->exec($stmtClean); } } } } catch (Exception $e) { error_log("Fout bij aanmaken tabellen: " . $e->getMessage()); } }