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 ошибки не произойдет тогда миграция будет считаться успешно выполненной.
Афоризм дня:
Кто не способен выдумывать небылицы, у того один выход – рассказывать были. (617)
Leave a reply