⚠️ PHP MySQL Driver Ontbreekt (pdo_mysql)
De PHP-installatie op uw server heeft momenteel de pdo_mysql extensie niet ingeschakeld. Zonder deze driver kan PHP geen verbinding maken met MariaDB.
Oplossing per servertype:
- Ubuntu / Debian:
sudo apt install php-mysql && sudo systemctl restart apache2 (of php-fpm)
- CentOS / RHEL / AlmaLinux:
sudo dnf install php-mysqlnd && sudo systemctl restart httpd
- cPanel / DirectAdmin / Plesk:
Ga naar Select PHP Version → Extensions en vink pdo_mysql (en nd_pdo_mysql of mysqlnd) aan.
- Windows / XAMPP:
Verwijder de puntkomma ; voor extension=pdo_mysql in uw php.ini en herstart Apache.
PHP Versie: " . PHP_VERSION . " • Momenteel actieve drivers: " . htmlspecialchars($driversList) . "
");
}
$dsn = sprintf(
'mysql:host=%s;port=%s;dbname=%s;charset=%s',
DB_HOST,
DB_PORT,
DB_NAME,
DB_CHARSET
);
$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;
}
try {
$pdo = new PDO($dsn, DB_USER, DB_PASS, $options);
// Zorg ervoor dat tabellen bestaan
ensure_tables_exist($pdo);
} catch (PDOException $e) {
// Als de database zelf nog niet bestaat, probeer deze aan te maken indien gebruiker rechten heeft
if ($e->getCode() == 1049) {
try {
$tempDsn = sprintf('mysql:host=%s;port=%s;charset=%s', DB_HOST, DB_PORT, DB_CHARSET);
$tempPdo = new PDO($tempDsn, DB_USER, DB_PASS, $options);
$tempPdo->exec(sprintf('CREATE DATABASE IF NOT EXISTS `%s` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci', DB_NAME));
$pdo = new PDO($dsn, DB_USER, DB_PASS, $options);
ensure_tables_exist($pdo);
return $pdo;
} catch (PDOException $ex) {
die("Database verbindingsfout: Kan database '" . htmlspecialchars(DB_NAME) . "' niet aanmaken of vinden op " . htmlspecialchars(DB_HOST) . ". Maak deze handmatig aan in MariaDB.");
}
}
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) . "
");
}
}
return $pdo;
}
/**
* Zorgt ervoor dat alle tabellen uit schema.sql aanwezig zijn in MariaDB
*/
function ensure_tables_exist(PDO $pdo): void {
try {
$result = $pdo->query("SHOW TABLES LIKE 'users'");
if ($result->rowCount() === 0) {
$schemaFile = __DIR__ . '/../schema.sql';
if (file_exists($schemaFile)) {
$sql = file_get_contents($schemaFile);
// Splits op puntkomma om elk CREATE TABLE statement apart uit te voeren
$statements = array_filter(array_map('trim', explode(';', $sql)));
foreach ($statements as $stmt) {
if (!empty($stmt)) {
$pdo->exec($stmt);
}
}
}
}
} catch (Exception $e) {
error_log("Fout bij uitvoeren schema.sql: " . $e->getMessage());
}
}