Запуск сценариев SQL для PostgreSQL с использованием PHP / PDO

Мне нужно запустить несколько сценариев SQL для моей базы данных, чтобы обновить схему и данные (какая-то миграция).

Поскольку есть некоторая логика, которую нужно проверить перед запуском каждого сценария, я пишу небольшой инструмент PHP для выполнения сценариев, но у меня есть простая проблема: могу ли я загрузить и выполнить «простой» сценарий SQL (включая манипулирование таблицами, триггеры & непосредственно для хранимых процедур), или я должен добавить маркеры в сценарий (чтобы отметить, где заканчивается каждое предложение) и выполнить предложение сценария по предложению?

Для доступа к базе данных я использую PDO.

1

Решение

У меня была похожая ситуация сегодня.

Мое решение очень простое, но достаточно умное, чтобы учитывать комментарии и утверждения, которые занимают несколько строк.

// open script file

$scriptfile = fopen($script_path, "r");
if (!$scriptfile) { die("ERROR: Couldn't open {$scriptfile}.\n"); }

// grab each line of file, skipping comments and blank lines

$script = '';
while (($line = fgets($scriptfile)) !== false) {
$line = trim($line);
if(preg_match("/^#|^--|^$/", $line)){ continue; }
$script .= $line;
}

// explode script by semicolon and run each statement

$statements = explode(';', $script);
foreach($statements as $sql){
if($sql === '') { continue; }
$query = $pdo->prepare($sql);
$query->execute();
if($query->errorCode() !== '00000'){ die("ERROR: SQL error code: ".$query->errorCode()."\n"); }
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]