Below is code to migrate data betwee two databases it checks if table or column exist othewise create it and insert or udpate data
Note it is not suitable solution for large database and make sure you bakup for you target database.
mysqli_select_db($dblink1,'db1'); // select database 1
$dblink2=mysqli_connect('127.0.0.1', 'root', ''); // connect server 2
mysqli_select_db($dblink2,'db2'); // select database 2
$result = (mysqli_query($dblink1,"SHOW TABLES "));
while ($row = mysqli_fetch_row($result)) {
$tables[] = $row[0];
}
echo "Searching Table: ".$tables[0] ."<br>";
foreach ($tables as $i => $table){
$val = mysqli_query($dblink2,"select 1 from $table ");
if($val !== FALSE) /***** table exists */
{
$structure1= get_colums($dblink1, $table);
$structure2= get_colums($dblink2, $table);
compare_colums($dblink1,$dblink2, $structure1, $structure2, $table );
$result = mysqli_query($dblink1,"SELECT * FROM $table "); // select all content
echo $table." Updating table.... "."<br>";
$rowcount=mysqli_num_rows($result);
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC) ) {
$update_string = update_query_format($row );
mysqli_query($dblink2,"INSERT INTO $table (".implode(", ",array_keys($row)).") VALUES ('".implode("', '",array_values($row))."')
ON DUPLICATE KEY UPDATE $update_string "); // insert one row into new table
}
echo $table." Updating table Completed.... total updated: $rowcount"."<br><br><br>";
}
else
{
/**** table not exists */
echo $table." Table not found "."<br>";
echo $table." Creating table... "."<br>";
$tableinfo = mysqli_fetch_array(mysqli_query($dblink1,"SHOW CREATE TABLE $table ")); // get structure from table on server 1
mysqli_query($dblink2," $tableinfo[1] "); // use found structure to make table on server 2
$result = mysqli_query($dblink1,"SELECT * FROM $table "); // select all content
echo $table." Copying table.... "."<br><br><br>";
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC) ) {
mysqli_query($dblink2,"INSERT INTO $table (".implode(", ",array_keys($row)).") VALUES ('".implode("', '",array_values($row))."')"); // insert one row into new table
}
}
}
mysqli_close($dblink1);
mysqli_close($dblink2);
function compare_structure($table, $dblink1 , $dblink2){
/*** Check if table exists */
$val = mysqli_query($dblink2,"select 1 from $table ");
if($val !== FALSE) /***** table exists */
{
$structure1= get_colums($dblink1, $table);
$structure2= get_colums($dblink2, $table);
compare_colums($dblink1,$dblink2, $structure1, $structure2, $table );
$result = mysqli_query($dblink1,"SELECT * FROM $table "); // select all content
echo $table." Updating table.... "."<br>";
$rowcount=mysqli_num_rows($result);
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC) ) {
$update_string = update_query_format($row );
mysqli_query($dblink2,"INSERT INTO $table (".implode(", ",array_keys($row)).") VALUES ('".implode("', '",array_values($row))."')
ON DUPLICATE KEY UPDATE $update_string "); // insert one row into new table
}
echo $table." Updating table Completed.... total updated: $rowcount"."<br><br><br>";
}
else
{
/**** table not exists */
echo $table." Table not found "."<br>";
echo $table." Creating table... "."<br>";
$tableinfo = mysqli_fetch_array(mysqli_query($dblink1,"SHOW CREATE TABLE $table ")); // get structure from table on server 1
mysqli_query($dblink2," $tableinfo[1] "); // use found structure to make table on server 2
$result = mysqli_query($dblink1,"SELECT * FROM $table "); // select all content
echo $table." Copying table.... "."<br><br><br>";
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC) ) {
mysqli_query($dblink2,"INSERT INTO $table (".implode(", ",array_keys($row)).") VALUES ('".implode("', '",array_values($row))."')"); // insert one row into new table
}
}
}
function get_colums($dblink, $table){
$result = mysqli_query($dblink,"SHOW COLUMNS FROM $table ");
$columns = [];
if (!$result) {
echo 'Could not run query: ' . mysql_error();
return [];
}
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
$columns[$row['Field']] = $row['Type'];
}
}
return $columns;
}
function compare_colums( $dblink1, $dblink2, $structure1, $structure2, $table ){
foreach ($structure2 as $field => $type){
if (!array_key_exists($field,$structure2)){
$result = mysqli_query($dblink2,"ALTER TABLE cus_tbl ADD $field $type NOT NULL ");
if ($result){
echo "Table: ". $table." New Field created ".$field. " ". $type. " .... "."<br>";
}
}
}
}
function update_query_format($row){
$query_format = "";
foreach ($row as $k => $v){
$query_format .= " ".$k. " = '". $v ."',";
}
// echo strlen($query_format);exit;
// echo substr($query_format, 0,strlen($query_format)-1); exit;
return substr($query_format, 0, strlen($query_format)-1);
}