connectSqlite($options); break; case 'mysql' || 'mariadb': $this->connectMysql($options); break; default: $error = getError("Database type \"{$options['type']}\" is not supported."); } } private function connectSqlite($options) { // pdo_sqlite extension is needed if (!extension_loaded('pdo_sqlite')) { $error = getError('PDO extension for SQLite not loaded.'); } // SQLite options if (empty($options['dbFile']) || !file_exists($options['dbFile'])) { $error = getError("SQLite database file \"{$dbFile}\" not found."); } // connect to SQLite try { $this->pdo = new PDO("sqlite:" . $options['dbFile']); $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // enable foreign key constraints (not ON by default in SQLite3) $this->pdo->exec('PRAGMA foreign_keys = ON;'); } catch (PDOException $e) { $error = getError('SQLite connection failed: ', $e->getMessage()); } } private function connectMysql($options) { // pdo_mysql extension is needed if (!extension_loaded('pdo_mysql')) { $error = getError('PDO extension for MySQL not loaded.'); } // MySQL options if (empty($options['host']) || empty($options['dbname']) || empty($options['user'])) { $error = getError('MySQL connection data is missing.'); } // Connect to MySQL try { $dsn = "mysql:host={$options['host']};port={$options['port']};dbname={$options['dbname']};charset=utf8"; $this->pdo = new PDO($dsn, $options['user'], $options['password'] ?? ''); $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { $error = getError('MySQL connection failed: ', $e->getMessage(), $config['environment']); } } public function getConnection() { return $this->pdo; } } ?>