Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- $host = "localhost";
- $user = "_";
- $password = "_";
- $database = "_";
- $red = "\033[0;31m";
- $green = "\033[0;32m";
- $nc = "\033[0m";
- $db = new mysqli($host, $user, $password, $database);
- if ($db->connect_errno) {
- exit("ERROR can't connect to DB: (" . $db->connect_errno . ") " . $db->connect_error . "\n");
- }
- $db_version = 0;
- $db_version_key = "db-version";
- $check_version_sql = "select o_val from options where o_key='$db_version_key'";
- $result = $db->query($check_version_sql);
- if ($result->num_rows === 0) {
- echo "Initializing db-version option...\n\n";
- $insert_default_version_sql = "insert into options (o_key, o_val) values ('$db_version_key', '0')";
- if (!$db->query($insert_default_version_sql)) {
- exit("ERROR: can't initialize db-version option\n");
- }
- }
- elseif ($result->num_rows === 1) {
- $row = $result->fetch_assoc();
- $db_version = intval($row['o_val']);
- echo "DB version: $db_version\n";
- }
- else {
- exit("ERROR: db-version option is duplicated");
- }
- $result->free();
- $scripts = explode("\n", `ls updates`);
- $count = 0;
- $new_version = $db_version;
- function filter_output($msg) {
- $w = "mysql: [Warning] Using a password";
- $length = strlen($w);
- return (substr($msg, 0, $length) !== $w);
- }
- foreach ($scripts as $script) {
- $parts = explode(".", $script);
- if (count($parts) > 2 && end($parts) == "sql") {
- $script_version = intval($parts[0]);
- if ($script_version > 0 && $script_version > $db_version){
- echo "{$green}executing script $script ...$nc \n";
- $cmd = "mysql --user=$user --password=$password $database < updates/$script 2>&1";
- $output = array();
- $error_code = 0;
- exec($cmd, $output, $error_code);
- echo join("\n", array_filter($output, "filter_output")) . "\n\n";
- if ($error_code != 0) {
- exit("{$red}Something went wrong during script $script execution...\nFix the script and run DB update again.\n");
- }
- $update_version_sql = "update options set o_val = $script_version where o_key='$db_version_key'";
- if(!$db->query($update_version_sql)) {
- exit("ERROR: can't set new version in options\n");
- };
- $count++;
- $new_version = $script_version;
- }
- }
- }
- echo $count === 0 ?
- "{$green}Well... nothing to do here...{$nc}\n" :
- "{$green}$count updates applied\nDB $database was upgraded to version: $new_version{$nc}\n";
- $db->close();
- ?>
Add Comment
Please, Sign In to add comment