PHP/MySQL : Copy Table and Data from one Database to another

标签 php mysql

另一个问题:在不使用类似内容的情况下从一个数据库复制整个表的最佳方法是什么:

CREATE TABLE DB2.USER SELECT * FROM DB1.USER;

这不起作用,因为我无法同时使用两个数据库中的数据。所以我决定用 php 来做这个。我必须缓存所有数据,然后在另一个数据库中创建一个表。

但是现在 - 缓存数据最快的方法是什么?我猜每个表几乎每次都少于 1000 条记录。

感谢您的投入

最佳答案

将其导出到 .sql 文件并导入到新数据库。

在phpMyAdmin中点击要导出的数据库,点击导出,勾选另存为文件,然后开始

然后将其上传到您要在其中复制数据的新数据库。


从严格的 PHP 意义上来说,我能想到的唯一方法是使用 SHOW TABLESdescribe {$table} 返回所有记录的字段名称和结构,解析出来,创建 create table 语句,然后循环每个表并创建 insert 语句。

恐怕我能为您做的最好的事情就是编写一种原型(prototype)代码,我认为它会令人难以置信服务器密集型,这就是为什么我建议您选择替代路线。

类似于:

<?php

    // connect to first DB

    $tables = mysql_query("SHOW TABLES") or die(mysql_error());
    while ($row = mysql_fetch_assoc($tables)) {
        foreach($row as $value) {
            $aTables[] = $value;
        }
    }
    $i = 0;
    foreach ($aTables as $table) {
        $desc = mysql_query("describe " . $table);
        while ($row = mysql_fetch_assoc($desc)) {
            $aFields[$i][] = array($row["Field"],$row["Type"],$row["Null"],$row["Key"],$row["Default"],$row["Extra"]);
        }
        $i++;
    }

    // connect to second DB

    for ($i = 0; $i < count($aTables); $i++) {

        // Loop through tables, fields, and rows for create table/insert statements

        $query = 'CREATE TABLE IF NOT EXISTS {$aTables[$i]} (
                //loop through fields {

                    {$aFields[$i][$j][0]} {$aFields[$i][$j][1]} {$aFields[$i][$j][2]} {$aFields[$i][$j][3]} {$aFields[$i][$j][4]} {$aFields[$i][$j][5]},
                    {$aFields[$i][$j][0]} {$aFields[$i][$j][1]} {$aFields[$i][$j][2]} {$aFields[$i][$j][3]} {$aFields[$i][$j][4]} {$aFields[$i][$j][5]},
                    {$aFields[$i][$j][0]} {$aFields[$i][$j][1]} {$aFields[$i][$j][2]} {$aFields[$i][$j][3]} {$aFields[$i][$j][4]} {$aFields[$i][$j][5]},
                    {$aFields[$i][$j][0]} {$aFields[$i][$j][1]} {$aFields[$i][$j][2]} {$aFields[$i][$j][3]} {$aFields[$i][$j][4]} {$aFields[$i][$j][5]},
                    etc...
                }
            )';

            //loop through data

            $query .= 'INSERT INTO {$aTables[$i]} VALUES';
            $result = mysql_query("SELECT * FROM " . $aTables[$i]);
            while ($row = mysql_fetch_assoc($result)) {
                    $query .= '(';
                foreach ($aFields[$i][0] as $field) {

                    $query .= '"{$row[$field]}",';
                }
                $query .= '),';
            }
        mysql_query($query);
    }

?> 

这是基于 this script或许可以作为引用。

希望这可以帮助您入门,但我建议您寻找非 PHP 替代方案。

关于PHP/MySQL : Copy Table and Data from one Database to another,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7250072/

相关文章:

java - SQL 错误 : 1064, SQLState:创建新实体时为 42000

mysql - MySQL 中存储过程的命名参数

php - 如何将 onclick 事件放在其值来自数据库的按钮上

php - 如何使用 gmdate() 显示超过 24 小时,但不显示天数

php - 如何使用 Php 在网络浏览器上显示 'top' 命令的输出

php - 如何对不返回任何值的 php 类构造函数进行单元测试

mysql - 无法通过Visual Studio 2012连接MySQL数据库

php - 使用 php 将图像保存到不同的 url

php - 用最后一个有效值替换零 Mysql

php - 如何在PHP中隔离服务器灾难脚本?