使用PHP将SQL表从一个数据库复制到另一台服务器上的数据库

时间:2018-10-25 09:49:48

标签: php sql prestashop

我需要将一些表从一个数据库复制到另一台服务器上的另一个数据库。

我不能使用主/从复制,因为在某些表中,我需要进行一些计算(根据货币更改产品价格),禁用某些产品,等等。

我有一个适用于两个数据库都在同一台服务器上的脚本(虽然不是最漂亮的服务器,但是效果很好),但是我在修改它以在两个不同的服务器上使用时遇到了问题(首先允许,可以)服务器,我可以使用简单的INSERT运行脚本,并将其插入到另一个脚本中。)

下面是脚本的一部分(在这里我将表1同步到表1):

/* Source */
$hostname_source = 'localhost';
$username_source = '******************';
$password_source = '******************';
$database_source = '******************';
$db_source = new mysqli($hostname_source,$username_source,$password_source,$database_source);

/* Target */
$hostname_target = 'IP_OF_THE_TARGET_SERVER';
$username_target = '******************';
$password_target = '******************';
$database_target = '******************';
$db_target = new mysqli($hostname_target,$username_target,$password_target,$database_target);

$source_db_prefix = "ps_";
$target_db_prefix = "ps_";

/* Tables to sync 1 to 1 */
$full_sync_tables = array('product', 'product_attribute', 'product_attribute_combination', 'product_attribute_image', 'product_attribute_shop', 'product_download', 'product_shop', 'product_supplier', 'category', 'category_group', 'category_product', 'category_shop', 'attribute', 'attribute_group', 'attribute_group_shop', 'attribute_impact', 'attribute_shop', 'layered_indexable_attribute_group', 'layered_product_attribute', 'feature', 'feature_product', 'feature_shop', 'feature_value', 'layered_indexable_feature', 'manufacturer', 'manufacturer_shop', 'product_supplier', 'supplier', 'supplier_shop', 'image', 'image_shop', 'product_attribute_image', 'stock_available', 'stock_mvt', 'stock_mvt_reason');

foreach ($full_sync_tables as $sync_table) {
    $db_target->query("TRUNCATE TABLE ".$target_db_prefix.$sync_table);
    $db_target->query("INSERT INTO ".$target_db_prefix.$sync_table." SELECT * FROM ".$database_source.".".$source_db_prefix.$sync_table);
    echo "End: ".$target_db_prefix.$sync_table." : ". $db_target->affected_rows."<br/>";
}

脚本删除表格:

$db_target->query("TRUNCATE TABLE ".$target_db_prefix.$sync_table);

但是他不能插入:

$db_target->query("INSERT INTO ".$target_db_prefix.$sync_table." SELECT * FROM ".$database_source.".".$source_db_prefix.$sync_table);

我怀疑$ database_source之前应该有对服务器的某种引用,但我不确定。

0 个答案:

没有答案