41 lines
1.4 KiB
PHP
41 lines
1.4 KiB
PHP
<?php
|
|
require '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";
|