38960-vm/apply_migrations.php
2026-03-21 18:34:05 +00:00

41 lines
1.4 KiB
PHP

<?php
require_once 'db/config.php';
$db = db();
// Ensure buffered query is on if possible (though config might override)
$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
$files = glob('db/migrations/*.sql');
sort($files);
foreach ($files as $file) {
echo "Processing $file...\n";
$sql_content = file_get_contents($file);
$sql_content = preg_replace('/--.*$/m', '', $sql_content);
$statements = explode(';', $sql_content);
foreach ($statements as $sql) {
$sql = trim($sql);
if (empty($sql)) continue;
try {
// Use query() instead of exec() to handle potential result sets (like SELECT 1)
// and close the cursor explicitly.
$stmt = $db->query($sql);
if ($stmt) {
$stmt->closeCursor();
}
echo "Executed: " . substr(str_replace("\n", " ", $sql), 0, 60) . "...\n";
} catch (PDOException $e) {
$msg = $e->getMessage();
if (strpos($msg, "Duplicate column") !== false ||
strpos($msg, "already exists") !== false ||
strpos($msg, "Duplicate key") !== false) {
echo "Skipped (Exists): " . substr(str_replace("\n", " ", $sql), 0, 60) . "...\n";
} else {
echo "Error: " . $msg . "\n";
}
}
}
}
echo "All migrations applied.\n";