2013-02-12 53 views
1

我必须创建数据库表的克隆。我与wordpress数据库合作,我想创建一个WP选项表的克隆。我如何创建数据库中的特定表的克隆。我发现一些代码在php脚本中创建数据库表的克隆

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\n"); 
} 

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']};\n\n"; 
} 
echo '</pre>'; 

,但我不能明白,我怎么能我给哪条路径的文件夹中得到数据库。

回答

0

我之前也有同样的问题,并从几小时的谷歌搜索结束以下代码。

希望这会有所帮助。

对于使用mysql_**不推荐使用,我们很抱歉。

<?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.\n"; 
    $dbpre = mysql_connect($oldServer, $DBIUser, $DBIPass); 
    mysql_select_db($dbname, $dbpre); 
    $sql = "SHOW TABLES FROM $dbname"; 
    echo $sql."\n"; 
    $result = mysql_query($sql); 

    if (!$result) 
    { 
     echo "DB Error, could not list tables\n"; 
     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\n"; 
      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.\n\n"); 
    while ($row = mysql_fetch_row($result)) 
    { 
     echo "Table: {$row[0]}\n"; 
     fwrite($f, "Table ".$row[0]."\n"); 
     $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."\n"); 
      } 

     } 
     $sql = "select count(*) as cnt from $dbname.$row[0] "; 
     $res = mysql_query($sql, $dbnew); 
     $roz = mysql_fetch_array($res); 
     echo $roz['cnt']." - Errors: ".$errors."\n"; 
     fwrite($f, "Old Record Count: ".$oldcnt." - New Record Count: ".$roz['cnt']." - Errors: ".$errors."\n"); 
     fwrite($f,"End table copy for table $row[0].\n\n"); 

    } 
    fclose($f); 
} 
else 
{ 
    var_dump($argv); 
} 
?>
+0

-1不推荐使用,因为这是非常糟糕的做法。 – Ben 2013-09-17 07:23:00

+0

@Steve我知道,但你是否读过我写在第三行回答中的问题..... – 2013-09-17 07:40:23