douhuo1738 2013-02-12 06:04
浏览 28
已采纳

在php脚本中创建数据库表的克隆

I have to create a clone of database table. I worked with wordpress database and i want to create a clone of WP-options table. How can i create a clone of a particular table in database. I found some code

set_time_limit(0);

$username = 'XXXXXX';
$password = 'YYYYYY';
$hostname = 'ZZZZZZ';
$database = 'AAAAAA';

try {
    $pdo = new PDO("mysql:host={$hostname};dbname={$database}", $username, $password);
}
catch(PDOException $e) {
    die("Could not connect to the database
");
}

echo '<pre>';
$stmt1 = $pdo->query('SHOW TABLES', PDO::FETCH_NUM);
foreach($stmt1->fetchAll() as $row) {
    $stmt2 = $pdo->query("SHOW CREATE TABLE `$row[0]`", PDO::FETCH_ASSOC);
    $table = $stmt2->fetch();
    echo "{$table['Create Table']};

";
}
echo '</pre>';

But i cant understand how can i get the database in a folder which path i given.

  • 写回答

1条回答 默认 最新

  • douzhun5971 2013-02-12 06:12
    关注

    I had same issue before and from googling of couple of hours i end up with below code.

    Hope that will help.

    Well geeks sorry for using mysql_** as its deprecated.

    <?php
    $DBIUser = 'someuser';
    $DBIPass = 'thepassword';
    
    $NewUser = 'someloser';
    $NewPass = 'thepassword';
    
    $oldServer = 'my crappy old mysql server domain';
    $newServer = 'localhost';
    
    if ($argv[0] > " ")
    {
        $dbname = $argv[1];
        echo "Starting copy of the $argv[1] database.
    ";
        $dbpre = mysql_connect($oldServer, $DBIUser, $DBIPass);
        mysql_select_db($dbname, $dbpre);
        $sql = "SHOW TABLES FROM $dbname";
        echo $sql."
    ";
        $result = mysql_query($sql);
    
        if (!$result)
        {
            echo "DB Error, could not list tables
    ";
            echo 'MySQL Error: ' . mysql_error();
            exit;
        }
    
        $dbtbl = mysql_connect($oldServer, $DBIUser, $DBIPass);
        mysql_select_db($dbname, $dbpre);
        $dbnew = mysql_connect($newServer, $NewUser, $NewPass);
        mysql_select_db("mysql", $dbnew);
    
        $res2 = mysql_query("CREATE DATABASE IF NOT EXISTS ".$dbname,$dbnew);
        if (!$res2)
        {
                echo "DB Error, could not create database
    ";
                echo 'MySQL Error: ' . mysql_error();
                exit;
        }
        mysql_select_db($dbname, $dbnew);
    
    
        if($result === FALSE)
        {
            die(mysql_error());
        }
    
        $f = fopen($dbname.'.log', 'w');
        fwrite($f, "Copy all tables in database $dbname on server $oldServer to new database on server $newServer.
    
    ");
        while ($row = mysql_fetch_row($result))
        {
            echo "Table: {$row[0]}
    ";
            fwrite($f, "Table ".$row[0]."
    ");
            $tableinfo = mysql_fetch_array(mysql_query("SHOW CREATE TABLE $row[0]  ",$dbtbl));
            $createsyntax = "CREATE TABLE IF NOT EXISTS ";
            $createsyntax .= substr($tableinfo[1], 13);
    
            mysql_query(" $createsyntax ",$dbnew);
    
            $res = mysql_query("SELECT * FROM $row[0]  ",$dbpre); // select all rows
            $oldcnt = mysql_num_rows($res);
            echo "Count: ".$oldcnt." - ";
    
            $errors = 0;
            while ($roz = mysql_fetch_array($res, MYSQL_ASSOC) )
            {
              $query =  "INSERT INTO $dbname.$row[0] (".implode(", ",array_keys($roz)).") VALUES (";
              $cnt = 0;
              foreach (array_values($roz) as $value)
              {
                if ($cnt == 0)
                {
                  $cnt++;
                } else
                {
                  $query .= ",";
                }
                $query .= "'";
                $query .= mysql_real_escape_string($value);
                $query .= "'";
    
              }
              $query .= ")";
    
              $look = mysql_query($query,$dbnew);
              if ($look === false)
              {
                // write insert to log on error
                $errors = $errors + 1;
                fwrite($f, mysql_error()." - ".$query."
    ");
              }
    
            }
            $sql = "select count(*) as cnt from $dbname.$row[0] ";
            $res = mysql_query($sql, $dbnew);
            $roz = mysql_fetch_array($res);
            echo $roz['cnt']." - Errors: ".$errors."
    ";
            fwrite($f, "Old Record Count: ".$oldcnt." - New Record Count: ".$roz['cnt']." - Errors: ".$errors."
    ");
            fwrite($f,"End table copy for table $row[0].
    
    ");
    
        }
        fclose($f);
    }
    else
    {
        var_dump($argv);
    }
    ?>
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大