SQL
Как выполнить MySQL миграцию и отследить результат выполнения?
В нашем примере миграция это файл содержащий SQL инструкции. Создадим файл file.sql:
SELECT * FROM test; SELECT * FROM tesdt; INSERT INTO test (id,name) VALUES (2,'newname');
В той же директории создадим исполняемый php файл run.php для командной строки:
<?php
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(E_ALL);
$db_user = '***';
$db_pass = '***';
$db_host = 'db4free.net';
$db_name = '***';
$migrationFilePath = 'file.sql';
$command = "mysql -u{$db_user} -p{$db_pass} -h {$db_host} -D {$db_name} -vv < {$migrationFilePath} 2>&1";
$output = exec($command, $migrateResult);
print_r('$output - '.$output.PHP_EOL);
print_r('$migrateResult: '.PHP_EOL);
print_r($migrateResult);
$result = false;
foreach ($migrateResult as $key => $value){//Если в output нет вхождения слова 'ERROR' тогда значит sql нормально отработал.
if (strpos($value, 'ERROR') !== false){
$resultInfo['errorMessage'] = $value;
}
}
if (empty($resultInfo['errorMessage'])){
$result = true;
}
print_r('$result: '.$result.PHP_EOL);
print_r('errorMessage: '.$resultInfo['errorMessage'].PHP_EOL);
echo PHP_EOL;
Откроем консоль нашего сервера, выполним команду php run.php
В результате в случае возникновения MySQL ошибки мы сохраним её в переменную, если SQL ошибки не произойдет тогда миграция будет считаться успешно выполненной.
Афоризм дня:
Кто очень сухощав, тот охотно носит фуфайку, у кого мало содержания – те раздувают его словами. (616)
By den
On August 23, 2019