VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /var/www/html/keeview_app/html/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/keeview_app/html/jsdb.php
<?php
include_once "jsencoding.php";
/*
php:
function DatabaseClass::init($host, $username , $password, $dbname);    // return new DatabaseClass;
function DatabaseClass::init2($host, $port, $username , $password, $dbname);    // return new DatabaseClass;

function DatabaseClass::syncDB($params);
$params = array(
    "db1" => array(
        "name" => dbname,
        (optional) "host" => "localhost",
        (optional) "port" => 3306,
        (optional) "username" => "",
        (optional) "password" => "",
        (optional) "prefix" => ""
    ),
    "db2" => array(
        "name" => dbname,
        (optional) "host" => "localhost",
        (optional) "port" => 3306,
        (optional) "username" => "",
        (optional) "password" => "",
        (optional) "prefix" => ""
    ),
    (optional) "config" => array(
        (optional) "silentmode" => TRUE,
        (optional) "testmode" => FALSE
    )
);


function DatabaseClass::load($tablename, $condition, $order);
function DatabaseClass::load2($tablename, $condition, $order);
function DatabaseClass::fetch($r);
$r = DatabaseClass::load2(...);

function DatabaseClass::insert($tablename, $data)            // insert single record
function DatabaseClass::insert2($tablename, $dataArray)      // insert multiple records
function DatabaseClass::update($tablename, $data)

function DatabaseClass::backupTable($tablename, (optional) $isdebug = FALSE)
return array(
    "tablename" => $tablename,
    "createtablesql" => array (
        "header" => $header,
        "footer" => $footer,
        "full" => $st
    ),
    "data" => EncodingClass::fromVariable($this->load($tablename, "", ""))
);


javascript:
*/

class DatabaseClass {

    public $db;
    public $dbname;
    public $lastquery;
    public $lasterror;

    public static function initFromDB($db, $dbname) {
        $retval = new DatabaseClass();
        $retval->db = $db;
        $retval->dbname = $dbname;
        return $retval;
    }

    public static function init($host, $username, $password, $dbname) {
        $db = mysqli_connect($host, $username , $password, $dbname);
        if (!$db) return null;
        $retval = new DatabaseClass();
        $retval->db = $db;
        $retval->dbname = $dbname;
        return $retval;
    }

    public static function init2($host, $port, $username , $password, $dbname) {
        $db = mysqli_connect($host, $username , $password, $dbname, $port);
        if (!$db) return null;
        $retval = new DatabaseClass();
        $retval->db = $db;
        $retval->dbname = $dbname;
        return $retval;
    }

    public function query($querystring) {
        $this->lastquery = $querystring;
        $retval = mysqli_query($this->db, $querystring);
        $this->lasterror = mysqli_error($this->db);
        return $retval;
    }

    private static function myaddslashes($value) {
        $xvalue = $value."";
        return addslashes($xvalue);
    }

    private static function getType($name) {
        $typelist = array (
            array("long" => "char", "short" => "vc"),
            array("long" => "text", "short" => "t"),
            array("long" => "int", "short" => "i"),
            array("long" => "decimal", "short" => "i"),
            array("long" => "double", "short" => "f"),
            array("long" => "real", "short" => "f"),
            array("long" => "float", "short" => "f"),
            array("long" => "datetime", "short" => "d"),
            array("long" => "date", "short" => "do"),
            array("long" => "year", "short" => "do"),
            array("long" => "time", "short" => "d"),
            array("long" => "geometry", "short" => "g")
        );
        $n = sizeof($typelist);
        for ($i = 0; $i < $n; $i++) {
            if (strcasecmp($name, $typelist[$i]["long"]) == 0) return $typelist[$i]["short"];
        }
        for ($i = 0; $i < $n; $i++) {
            if (stristr($name, $typelist[$i]["long"]) !== FALSE) return $typelist[$i]["short"];
        }
        return "";
    }

    private static function getSimpleType($name) {
        $x = DatabaseClass::getType($name);
        if (strcmp($x, "vc") == 0) return "t";
        if (strcmp($x, "t") == 0) return "t";
        if (strcmp($x, "i") == 0) return "n";
        if (strcmp($x, "f") == 0) return "n";
        if (strcmp($x, "d") == 0) return "d";
        if (strcmp($x, "do") == 0) return "do";
        if (strcmp($x, "g") == 0) return "g";
        return "";
    }

    public function load2($tablename, $condition = "", $order = "") {
        $result2 = $this->query('DESCRIBE `'.$tablename."`");
        $nfield = 0;
        $field_name = array();
        $field_type = array();
        $scode_type = array();
        if (is_null($result2) || ($result2 === FALSE)) {
            echo $tablename." not found!";
            return array();
        }
        while ($row2 = mysqli_fetch_array($result2, MYSQLI_BOTH)) {
            $field_name[$nfield] = strtolower($row2["Field"]);
            $field_type[$nfield] = strtolower($row2["Type"]);
            if (strlen($field_name[$nfield]) == 0) continue;
            if (strlen($field_type[$nfield]) == 0) continue;
            $scode_type[$nfield] = DatabaseClass::getType($field_type[$nfield]);
            $nfield++;
        }
        if ($nfield > 0) {
            $querystring = "SELECT ";
            for ($i = 0; $i < $nfield; $i++) {
                if ($i > 0) $querystring .= ", ";
                if ((strcmp($scode_type[$i], "d") == 0) || (strcmp($scode_type[$i], "do") == 0)) {
                    //$querystring .= "UNIX_TIMESTAMP(`".$field_name[$i]."`)";
                    $querystring .= "TIMESTAMPDIFF(SECOND, \"1970-01-01\", `".$field_name[$i]."`)";

                }
                else if (strcmp($scode_type[$i], "g") == 0) {
                    $querystring .= "ST_AsText(`".$field_name[$i]."`)";
                }
                else {
                    $querystring .= "`".$field_name[$i]."`";
                }
            }
            $querystring .= " FROM `".$tablename."`";
            if ((is_string($condition)) && ($condition != NULL)) {
                if (strlen($condition) > 0) $querystring .= " WHERE (".$condition.")";
            }
            if ((is_string($order)) && ($order != NULL)) {
                if (strlen($order) > 0) $querystring .= " ORDER BY ".$order;
            }
            //echo $querystring."\r\n";
            $result = $this->query($querystring);
            $n = 0;
            if ($result) {
                return array(
                    "field_name" => $field_name,
                    "field_type" => $field_type,
                    "scode_type" => $scode_type,
                    "result" => $result,
                    "nfield" => $nfield
                );
            }
            else {
                return NULL;
            }
        }
        return NULL;
    }

    public static function fetch(&$r) {
        $retval = array();
        $field_name = $r["field_name"];

        $field_type = $r["field_type"];
        $scode_type = $r["scode_type"];
        $nfield = $r["nfield"];

        if ($row = mysqli_fetch_array($r["result"], MYSQLI_BOTH)) {
            for ($i = 0; $i < $nfield; $i++) {
                if (strcmp($scode_type[$i], "i") == 0) {
                    $retval[$field_name[$i]] = intval($row[$i]);
                }
                else if (strcmp($scode_type[$i], "d") == 0) {
                    $ts = intval($row[$i]);
                    $retval[$field_name[$i]] = new DateTime("@$ts");
                }
                else if (strcmp($scode_type[$i], "do") == 0) {
                    $ts = intval($row[$i]);
                    $retval[$field_name[$i]] = new DateTime2("@$ts");
                    $retval[$field_name[$i]]->mode = "date";
                }
                else if (strcmp($scode_type[$i], "f") == 0) {
                    $retval[$field_name[$i]] = floatval($row[$i]);
                }
                else {
                    $retval[$field_name[$i]] = strval($row[$i]);
                }
            }
            return $retval;
        }
        mysqli_free_result($r["result"]);
        unset($r["result"]);
        unset($r["field_name"]);
        unset($r["field_type"]);
        unset($r["scode_type"]);
        unset($r["nfield"]);
        return FALSE;
    }

    public function load($tablename, $condition = "", $order = "") {
        $result = $this->load2($tablename, $condition, $order);
        if (is_null($result)) return array();
        $retval = array();
        while ($row = DatabaseClass::fetch($result)) {
            array_push($retval, $row);
        }
        return $retval;
    }

    public function excelload($tablename, $condition = "", $order = "", $alt = array()) {
        $result = $this->load($tablename, $condition, $order);
        $data = array();
        $count = count($result);
        if ($count > 0){
            $xs = array_keys ($result[0]);
            $ts = array();
            $count2 = count($result[0]);
            $count3 = count($alt);
            for ($j = 0; $j < $count2; $j++){
                for ($k = 0; $k < $count3; $k++) {
                    if (strcasecmp($xs[$j], $alt[$k]["key"]) == 0) {
                        array_push($ts, $alt[$k]["value"]);
                        break;
                    }
                }
                if ($k == $count3) array_push($ts, $xs[$j]);
                array_push($data, array("row" => 0, "col" => $j, "value" => $ts[$j], "bold" => true, "backgroundcolor" => "#e2efda"));
            }
            for ($i = 0; $i < $count; $i++){
                for ($j = 0; $j < $count2; $j++){
                    $x = array("row" => ($i+1), "col" => $j, "value" =>$result[$i][$xs[$j]]);
                    array_push($data, $x);
                }
            }
        }
        return $data;
    }

    public function insert($tablename, $data, $isdebug = FALSE) {
        $result2 = $this->query("DESCRIBE `".$tablename."`");
        $nfield = 0;
        while ($row2 = mysqli_fetch_array($result2, MYSQLI_BOTH)) {
            $field_name[$nfield] = strtolower($row2["Field"]);
            $field_type[$nfield] = strtolower($row2["Type"]);
            if (strlen($field_name[$nfield]) == 0) continue;
            if (strlen($field_type[$nfield]) == 0) continue;
            $scode_type[$nfield] = DatabaseClass::getSimpleType($field_type[$nfield]);
            $nfield++;
        }
        $querystring = "INSERT INTO `".$tablename."` ";
        $fname = "";
        $fvalue = "";
        $c = 0;
        foreach ($data as $key => $value) {
            $key = strtolower($key);
            for ($i = 0; $i < $nfield; $i++) {
                if (strcasecmp($key, $field_name[$i]) == 0) {
                    if ($c > 0) {
                        $fname .= ", ";
                        $fvalue .= ", ";
                    }
                    $fname .= "`".$field_name[$i]."`";
                    if (strcmp($scode_type[$i], "t") == 0) {
                        $fvalue .= "\"".DatabaseClass::myaddslashes($value)."\"";
                    }
                    else if (strcmp($scode_type[$i], "n") == 0) {
                        $fvalue .= $value;
                    }
                    else if (strcmp($scode_type[$i], "d") == 0) {
                        $fvalue .= "FROM_UNIXTIME(".$value->getTimestamp().")";
                    }
                    else if (strcmp($scode_type[$i], "do") == 0) {
                        if ($value instanceof DateTime2) {
                            $fvalue .= "STR_TO_DATE('".$value->iyear;
                            if ($value->imonth < 10) {
                                $fvalue .= "0".$value->imonth;
                            }
                            else {
                                $fvalue .= $value->imonth;
                            }
                            if ($value->idate < 10) {
                                $fvalue .= "0".$value->idate;
                            }
                            else {
                                $fvalue .= $value->idate;
                            }
                            $fvalue .= "','%Y%m%d')";
                        }
                        else {
                            $fvalue .= "FROM_UNIXTIME(".$value->getTimestamp().")";
                        }
                    }
                    $c++;
                    break;
                }
            }
        }
        if ($c > 0) {
            $querystring .= " (".$fname.") VALUES (".$fvalue.")";
            if ($isdebug) echo $querystring."<br>\n";
            $this->query($querystring);
            if (strcmp($this->lasterror, "") == 0) {
                $lastid = mysqli_insert_id($this->db);
            }
            else {
                $lastid = 0;
            }
        }
        else {
            $lastid = 0;
        }
        return $lastid;
    }

    public function insert2($tablename, $dataArray) {
        $result2 = $this->query("DESCRIBE `".$tablename."`");
        $nfield = 0;
        while ($row2 = mysqli_fetch_array($result2, MYSQLI_BOTH)) {
            $field_name[$nfield] = strtolower($row2["Field"]);
            $field_type[$nfield] = strtolower($row2["Type"]);
            if (strlen($field_name[$nfield]) == 0) continue;
            if (strlen($field_type[$nfield]) == 0) continue;
            $scode_type[$nfield] = DatabaseClass::getSimpleType($field_type[$nfield]);
            $nfield++;
        }
        $n = count($dataArray);
        for ($k = 0; $k < $n; $k++) {
            $querystring = "INSERT INTO `".$tablename."` ";
            $fname = "";
            $fvalue = "";
            $c = 0;
            foreach ($dataArray[$k] as $key => $value) {
                for ($i = 0; $i < $nfield; $i++) {
                    if (strcasecmp($key, $field_name[$i]) == 0) {
                        if ($c > 0) {
                            $fname .= ", ";
                            $fvalue .= ", ";
                        }
                        $fname .= "`".$field_name[$i]."`";
                        if (strcmp($scode_type[$i], "t") == 0) {
                            $fvalue .= "\"".DatabaseClass::myaddslashes($value)."\"";
                        }
                        else if (strcmp($scode_type[$i], "n") == 0) {
                            $fvalue .= $value;
                        }
                        else if (strcmp($scode_type[$i], "d") == 0) {
                            $fvalue .= "FROM_UNIXTIME(".$value->getTimestamp().")";
                        }
                        else if (strcmp($scode_type[$i], "do") == 0) {
                            if ($value instanceof DateTime2) {
                                $fvalue .= "STR_TO_DATE('".$value->iyear;
                                if ($value->imonth < 10) {
                                    $fvalue .= "0".$value->imonth;
                                }
                                else {
                                    $fvalue .= $value->imonth;
                                }
                                if ($value->idate < 10) {
                                    $fvalue .= "0".$value->idate;
                                }
                                else {
                                    $fvalue .= $value->idate;
                                }
                                $fvalue .= "','%Y%m%d')";
                            }
                            else {
                                $fvalue .= "FROM_UNIXTIME(".$value->getTimestamp().")";
                            }
                        }
                        $c++;
                        break;
                    }
                }
            }
            if ($c > 0) {
                $querystring .= " (".$fname.") VALUES (".$fvalue.")";
                $this->query($querystring);
                if (strcmp($this->lasterror, "") == 0) {
                    $lastid = mysqli_insert_id($this->db);
                }
                else {
                    $lastid = 0;
                }
            }
            else {
                $lastid = 0;
            }
            $retval[$k] = $lastid;
        }
        if (isset($retval)) {
            return $retval;
        }
        else {
            return array();
        }
    }

    public function insert3($tablename, $dataArray) {
        $result2 = $this->query("DESCRIBE `".$tablename."`");
        $nfield = 0;
        while ($row2 = mysqli_fetch_array($result2, MYSQLI_BOTH)) {
            $field_name[$nfield] = strtolower($row2["Field"]);
            $field_type[$nfield] = strtolower($row2["Type"]);
            if (strlen($field_name[$nfield]) == 0) continue;
            if (strlen($field_type[$nfield]) == 0) continue;
            $scode_type[$nfield] = DatabaseClass::getSimpleType($field_type[$nfield]);
            $nfield++;
        }
        $n = count($dataArray);
        if ($n > 0) {
            $fname = "";
            $querystring = "INSERT INTO `".$tablename."` ";
            for ($i = 0; $i < $nfield; $i++) {
                if ($i > 0) $fname .= ", ";
                $fname .= "`".$field_name[$i]."`";
            }
            $querystring .= " (".$fname.") VALUES ";
            for ($k = 0; $k < $n; $k++) {
                $fvalue = "";
                for ($i = 0; $i < $nfield; $i++) {
                    if ($i > 0) $fvalue .= ", ";
                    if (isset($dataArray[$k][$field_name[$i]])) {
                        $value = $dataArray[$k][$field_name[$i]];
                        if (strcmp($scode_type[$i], "t") == 0) {
                            $fvalue .= "\"".DatabaseClass::myaddslashes($value)."\"";
                        }
                        else if (strcmp($scode_type[$i], "n") == 0) {
                            $fvalue .= $value;
                        }
                        else if (strcmp($scode_type[$i], "d") == 0) {
                            $fvalue .= "FROM_UNIXTIME(".$value->getTimestamp().")";
                        }
                        else {
                            $fvalue .= "NULL";
                        }
                    }
                    else {
                        $fvalue .= "NULL";
                    }
                }
                if ($k == 0) {
                    $querystring .= "(".$fvalue.")";
                }
                else {
                    $querystring .= ", (".$fvalue.")";
                }
            }
            $this->query($querystring);
        }
    }

    public function update($tablename, $data, $isdebug = FALSE) {
        $result2 = $this->query("DESCRIBE `".$tablename."`");
        $nfield = 0;
        while ($row2 = mysqli_fetch_array($result2, MYSQLI_BOTH)) {
            $field_name[$nfield] = strtolower($row2["Field"]);
            $field_type[$nfield] = strtolower($row2["Type"]);
            if (strlen($field_name[$nfield]) == 0) continue;
            if (strlen($field_type[$nfield]) == 0) continue;
            $scode_type[$nfield] = DatabaseClass::getSimpleType($field_type[$nfield]);
            $iskey[$nfield] = 0;
            $nfield++;
        }
        $st = "SELECT COLUMN_NAME";
        $st .= " FROM INFORMATION_SCHEMA.COLUMNS";
        $st .= " WHERE TABLE_SCHEMA = \"".DatabaseClass::myaddslashes($this->dbname)."\"";
        $st .= " AND TABLE_NAME = \"".DatabaseClass::myaddslashes($tablename)."\"";
        $st .= " AND COLUMN_KEY = \"PRI\"";
        $result3 = $this->query($st);
        while($row3 = mysqli_fetch_array($result3, MYSQLI_BOTH)) {
            for ($i = 0; $i < $nfield; $i++) {
                if (strcasecmp($row3[0], $field_name[$i]) == 0) {
                    $iskey[$i] = 1;
                    break;
                }
            }
        }
        $c = 0;
        $d = 0;
        $fvalue = "";
        $fwhere = "";
        foreach ($data as $key => $value) {
            for ($i = 0; $i < $nfield; $i++) {
                if (strcasecmp($key, $field_name[$i]) == 0) {
                    if ($iskey[$i] == 0) {
                        if ($c > 0) $fvalue .= ", ";
                        if (strcmp($scode_type[$i], "t") == 0) {
                            $fvalue .= "`".$field_name[$i]."`=\"".DatabaseClass::myaddslashes($value)."\"";
                        }
                        else if (strcmp($scode_type[$i], "n") == 0) {
                            $fvalue .= "`".$field_name[$i]."`=".$value;
                        }
                        else if (strcmp($scode_type[$i], "d") == 0) {
                            $fvalue .= "`".$field_name[$i]."`=FROM_UNIXTIME(".$value->format('U').")";
                        }
                        else if (strcmp($scode_type[$i], "do") == 0) {
                            $fvalue .= "`".$field_name[$i]."`=";
                            if ($value instanceof DateTime2) {
                                $fvalue .= "STR_TO_DATE('".$value->iyear;
                                if ($value->imonth < 10) {
                                    $fvalue .= "0".$value->imonth;
                                }
                                else {
                                    $fvalue .= $value->imonth;
                                }
                                if ($value->idate < 10) {
                                    $fvalue .= "0".$value->idate;
                                }
                                else {
                                    $fvalue .= $value->idate;
                                }
                                $fvalue .= "','%Y%m%d')";
                            }
                            else {
                                $fvalue .= "FROM_UNIXTIME(".$value->format('U').")";
                            }
                        }
                        $c++;
                    }
                    else {
                        if ($d > 0) $fwhere .= " AND ";
                        if (strcmp($scode_type[$i], "t") == 0) {
                            $fwhere .= "(`".$field_name[$i]."`=\"".DatabaseClass::myaddslashes($value)."\")";
                        }
                        else if (strcmp($scode_type[$i], "n") == 0) {
                            $fwhere .= "(`".$field_name[$i]."`=".$value.")";
                        }
                        else if (strcmp($scode_type[$i], "d") == 0) {
                            $fwhere .= "(`".$field_name[$i]."`=FROM_UNIXTIME(".$value->getTimestamp()."))";
                        }
                        else if (strcmp($scode_type[$i], "do") == 0) {
                            $fwhere .= "(`".$field_name[$i]."`=";
                            if ($value instanceof DateTime2) {
                                $fwhere .= "STR_TO_DATE('".$value->iyear;
                                if ($value->imonth < 10) {
                                    $fwhere .= "0".$value->imonth;
                                }
                                else {
                                    $fwhere .= $value->imonth;
                                }
                                if ($value->idate < 10) {
                                    $fwhere .= "0".$value->idate;
                                }
                                else {
                                    $fwhere .= $value->idate;
                                }
                                $fwhere .= "','%Y%m%d')";
                            }
                            else {
                                $fwhere .= "FROM_UNIXTIME(".$value->getTimestamp().")";
                            }
                        }
                        $d++;
                    }
                    break;
                }
            }
        }
        if (($c > 0) && ($d > 0)) {
            $querystring = "UPDATE `".$tablename."` SET ".$fvalue." WHERE (".$fwhere.")";
            if ($isdebug) echo $querystring."<br>\n";
            $this->query($querystring);
            if (strcmp($this->lasterror, "") == 0) {
                $lastid = 1;
            }
            else {
                $lastid = 0;
            }
        }
        else {
            $lastid = 0;
        }
        return $lastid;
    }

    public function backupTable($tablename, $isdebug = FALSE) {
        $st = "SHOW CREATE TABLE ".$tablename;
        $r = $this->query($st);
        if ($r) {
            if ($row2 = mysqli_fetch_array($r, MYSQLI_BOTH)) {
                $h1 = "CREATE TABLE `";
                $h2 = "` ".substr($row2[1], 15 + strlen($tablename));
                $st = $h1.$tablename.$h2;
                return array(
                    "tablename" => $tablename,
                    "createtablesql" => array (
                        "header" => $h1,
                        "footer" => $h2,
                        "full" => $st
                    ),
                    "data" => EncodingClass::fromVariable($this->load($tablename, "", ""))
                );
            }
        }
        else if ($isdebug) {
            echo "Table <".$tablename."> not found!";
            exit(0);
        }
        return null;
    }

    private static function silentMessage($silentmode, &$sourcecontent, $content) {
        $sourcecontent .= $content;
        if (!$silentmode) EncodingClass::echo_x($content);
    }

    public static function syncDB($params) {
        if (!isset($params["db1"]["name"])) return "Database 1's name not found";
        if (!isset($params["db2"]["name"])) return "Database 2's name not found";
        if (!isset($params["db1"]["host"])) $params["db1"]["host"] = "localhost";
        if (!isset($params["db1"]["port"])) $params["db1"]["port"] = 3306;
        if (!isset($params["db1"]["username"])) $params["db1"]["username"] = "";
        if (!isset($params["db1"]["password"])) $params["db1"]["password"] = "";
        if (!isset($params["db1"]["prefix"])) $params["db1"]["prefix"] = "";
        if (!isset($params["db2"]["host"])) $params["db2"]["host"] = "localhost";
        if (!isset($params["db2"]["port"])) $params["db2"]["port"] = 3306;
        if (!isset($params["db2"]["username"])) $params["db2"]["username"] = "";
        if (!isset($params["db2"]["password"])) $params["db2"]["password"] = "";
        if (!isset($params["db2"]["prefix"])) $params["db2"]["prefix"] = "";
        if (!isset($params["config"])) $params["config"] = array();
        if (!isset($params["config"]["silentmode"])) $params["config"]["silentmode"] = TRUE;
        if (!isset($params["config"]["testmode"])) $params["config"]["testmode"] = FALSE;
        $xr = "";
        $silentmode = $params["config"]["silentmode"];
        $testmode = $params["config"]["testmode"];
        $conn1 = DatabaseClass::init2($params["db1"]["host"], $params["db1"]["port"], $params["db1"]["username"] , $params["db1"]["password"], $params["db1"]["name"]);
        if ($conn1 == NULL) {
            DatabaseClass::silentMessage($silentmode, $xr, "Can not connect to database 1");
            exit(0);
        }
        $conn2 = DatabaseClass::init2($params["db2"]["host"], $params["db2"]["port"], $params["db2"]["username"] , $params["db2"]["password"], $params["db2"]["name"]);
        if ($conn2 == NULL) {
            DatabaseClass::silentMessage($silentmode, $xr, "Can not connect to database 2");
            exit(0);
        }
        $st = "SELECT TABLE_NAME, ENGINE, TABLE_ROWS, DATA_LENGTH, TABLE_COLLATION FROM information_schema.TABLES ".
             "WHERE `TABLE_SCHEMA` = '".$params["db1"]["name"]."' ORDER BY TABLE_NAME";
        $result = $conn1->query($st);
        $p1length = strlen($params["db1"]["prefix"]);
        while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
            $x = strlen($row[0]);
            if ($p1length >= $x) continue;
            $ok = 1;
            for ($i = 0; $i < $p1length; $i++) {
                if ($params["db1"]["prefix"][$i] != $row[0][$i]) {
                    $ok = 0;
                    break;
                }
            }
            if ($ok == 0) continue;
            $xname = $params["db2"]["prefix"].substr($row[0], $p1length);
            if (!$silentmode) echo "Source: ".$row[0]."<br>";
            $r = $conn1->query("DESCRIBE `".$row[0]."`");
            $tc1 = array ();
            $td1 = array ();
            if ($r != null) {
                while ($row2 = mysqli_fetch_array($r, MYSQLI_BOTH)) {
                    $s = strtolower($row2["Field"]);
                    $t = strtolower($row2["Type"]);
                    array_push($td1, $s);
                    $tc1[$s] = $t;
                    DatabaseClass::silentMessage($silentmode, $xr, "&emsp;".$s."&emsp;".$t."<br>");
                }
            }
            $r = $conn2->query("DESCRIBE `".$xname."`");
            $tc2 = array ();
            $td2 = array ();
            if ($r != null) {
                DatabaseClass::silentMessage($silentmode, $xr, "Target: ".$xname."<br>");
                while ($row2 = mysqli_fetch_array($r, MYSQLI_BOTH)) {
                    $s = strtolower($row2["Field"]);
                    $t = strtolower($row2["Type"]);
                    array_push($td2, $s);
                    $tc2[$s] = $t;
                    DatabaseClass::silentMessage($silentmode, $xr, "&emsp;".$s."&emsp;".$t."<br>");
                }
                DatabaseClass::silentMessage($silentmode, $xr, "Result:<br>");
                $c = sizeof($td1);
                for ($i = 0; $i < $c; $i++) {
                    $s = $td1[$i];
                    if (!isset($tc2[$s])) {
                        DatabaseClass::silentMessage($silentmode, $xr, "&emsp;".$s.": not found!<br>");
                        $st = "ALTER TABLE `".$xname."` ADD `".$s."` ".$tc1[$s]." NOT NULL ;";
                        DatabaseClass::silentMessage($silentmode, $xr, "&emsp;<span style=\"color: blue; font-weight: bold;\">".$st."</span><br>");
                        if (!$testmode) $conn2->query($st);
                    }
                    else if (strcasecmp($tc1[$s], $tc2[$s]) != 0) {
                        DatabaseClass::silentMessage($silentmode, $xr, "&emsp;".$s.": not matched: ".$tc1[$s]." - ".$tc2[$s]."<br>");
                        $bp = strpos($tc1[$s], "(");
                        if ($bp === FALSE) {
                            $ss = DatabaseClass::getSimpleType($tc1[$s]);
                        }
                        else {
                            $ss = DatabaseClass::getSimpleType(substr($tc1[$s], 0, $bp));
                        }
                        $bp = strpos($tc2[$s], "(");
                        if ($bp === FALSE) {
                            $ts = DatabaseClass::getSimpleType($tc2[$s]);
                        }
                        else {
                            $ts = DatabaseClass::getSimpleType(substr($tc2[$s], 0, $bp));
                        }
                        if (($ss[0] == "d") && ($ts[0] == "n")) {
                            $st = "ALTER TABLE `".$xname."` ADD `temp_convert_".$s."` ".$tc1[$s]." NOT NULL ;";
                            DatabaseClass::silentMessage($silentmode, $xr, "&emsp;<span style=\"color: blue; font-weight: bold;\">".$st."</span><br>");
                            if (!$testmode) $conn2->query($st);
                            $st = "UPDATE `".$xname."` SET `temp_convert_".$s."`=FROM_UNIXTIME(`".$s."`)";
                            DatabaseClass::silentMessage($silentmode, $xr, "&emsp;<span style=\"color: blue; font-weight: bold;\">".$st."</span><br>");
                            if (!$testmode) $conn2->query($st);
                            $st = "ALTER TABLE `".$xname."` DROP `".$s."`;";
                            DatabaseClass::silentMessage($silentmode, $xr, "&emsp;<span style=\"color: blue; font-weight: bold;\">".$st."</span><br>");
                            if (!$testmode) $conn2->query($st);
                            $st = "ALTER TABLE `".$xname."` CHANGE `temp_convert_".$s."` `".$s."` ".$tc1[$s]." NOT NULL ;";
                            DatabaseClass::silentMessage($silentmode, $xr, "&emsp;<span style=\"color: blue; font-weight: bold;\">".$st."</span><br>");
                            if (!$testmode) $conn2->query($st);
                        }
                        else if (($ss[0] == "n") && ($ts[0] == "d")) {
                            $st = "ALTER TABLE `".$xname."` ADD `temp_convert_".$s."` ".$tc1[$s]." NOT NULL ;";
                            DatabaseClass::silentMessage($silentmode, $xr, "&emsp;<span style=\"color: blue; font-weight: bold;\">".$st."</span><br>");
                            if (!$testmode) $conn2->query($st);
                            $st = "UPDATE `".$xname."` SET `temp_convert_".$s."`=UNIX_TIMESTAMP(`".$s."`)";
                            DatabaseClass::silentMessage($silentmode, $xr, "&emsp;<span style=\"color: blue; font-weight: bold;\">".$st."</span><br>");
                            if (!$testmode) $conn2->query($st);
                            $st = "ALTER TABLE `".$xname."` DROP `".$s."`;";
                            DatabaseClass::silentMessage($silentmode, $xr, "&emsp;<span style=\"color: blue; font-weight: bold;\">".$st."</span><br>");
                            if (!$testmode) $conn2->query($st);
                            $st = "ALTER TABLE `".$xname."` CHANGE `temp_convert_".$s."` `".$s."` ".$tc1[$s]." NOT NULL ;";
                            DatabaseClass::silentMessage($silentmode, $xr, "&emsp;<span style=\"color: blue; font-weight: bold;\">".$st."</span><br>");
                            if (!$testmode) $conn2->query($st);
                        }
                        else {
                            $st = "ALTER TABLE `".$xname."` CHANGE `".$s."` `".$s."` ".$tc1[$s]." ;";
                            DatabaseClass::silentMessage($silentmode, $xr, "&emsp;<span style=\"color: blue; font-weight: bold;\">".$st."</span><br>");
                            if (!$testmode) $conn2->query($st);
                        }
                    }
                    else {
                        DatabaseClass::silentMessage($silentmode, $xr, "&emsp;".$s.": OK!<br>");
                    }
                }
                $c = sizeof($td2);
                for ($i = 0; $i < $c; $i++) {
                    $s = $td2[$i];
                    if (!isset($tc1[$s])) {
                        DatabaseClass::silentMessage($silentmode, $xr, "&emsp;".$s.": not found!<br>");
                        $st = "ALTER TABLE `".$xname."` DROP `".$s."`;";
                        DatabaseClass::silentMessage($silentmode, $xr, "&emsp;<span style=\"color: blue; font-weight: bold;\">".$st."</span><br>");
                        if (!$testmode) $conn2->query($st);
                    }
                }
            }
            else {
                DatabaseClass::silentMessage($silentmode, $xr, "Target: ".$xname." - not found<br>");
                $st = "SHOW CREATE TABLE ".$row[0];
                $r = $conn1->query($st);
                while ($row2 = mysqli_fetch_array($r, MYSQLI_BOTH)) {
                    $st = "CREATE TABLE `".$xname."` ".substr($row2[1], 15 + strlen($row[0]));
                    DatabaseClass::silentMessage($silentmode, $xr, "&emsp;<span style=\"color: blue; font-weight: bold;\">".$st."</span><br>");
                    if (!$testmode) $conn2->query($st);
                }
            }
            DatabaseClass::silentMessage($silentmode, $xr, "====================================================================================<br>");
        }
        return $xr;
    }
};
?>

VaKeR 2022