PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]); $safeDb = preg_replace('/[^a-zA-Z0-9_]/', '', DB_NAME); $server->exec("CREATE DATABASE IF NOT EXISTS `$safeDb` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"); $dsn = "mysql:host=".DB_HOST.";dbname=".$safeDb.";charset=".DB_CHAR; $pdo = new PDO($dsn, DB_USER, DB_PASS, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]); ensureWebgisV3Schema($pdo); } return $pdo; } function ensureWebgisV3Schema(PDO $pdo): void { $stmt = $pdo->query("SHOW TABLES LIKE 'role'"); if ($stmt->fetch()) return; $schemaFile = __DIR__ . '/../sql/schema.sql'; if (!is_file($schemaFile)) return; $sql = file_get_contents($schemaFile); $sql = preg_replace('/CREATE DATABASE IF NOT EXISTS\s+`?webgis_kemiskinan`?.*?;/is', '', $sql); $sql = preg_replace('/USE\s+`?webgis_kemiskinan`?\s*;/i', '', $sql); $sql = preg_replace('/^\s*--.*$/m', '', $sql); foreach (array_filter(array_map('trim', explode(';', $sql))) as $statement) { if ($statement === '') continue; $pdo->exec($statement); } }