2011-08-30 2 views
2

Anoter question: Quelle est la meilleure façon de copier une table entière d'une base de données sans utiliser quelque chose comme ceci:PHP/MySQL: Copier le tableau et les données d'une base de données à un autre

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

Cela ne fonctionne pas parce que Je ne peux pas utiliser les données de deux bases de données en même temps. J'ai donc décidé de faire cela avec php. Là j'ai dû mettre en cache toutes les données et ensuite je créerais une table dans l'autre base de données.

Mais maintenant - quel serait le moyen le plus rapide de mettre en cache les données? Je suppose qu'il y a à chaque fois moins de 1000 enregistrements par table.

Merci pour votre entrée

+0

Voir cette question: http://stackoverflow.com/questions/3932608/how-to-copy- a-table-de-un-mysql-base de données-à-autre-mysql-base de données –

Répondre

5

Exporter vers un fichier sql et l'importation à la nouvelle base de données.

Dans phpMyAdmin cliquez sur la base de données que vous souhaitez exporter, cliquez sur export, vérifiez enregistrer en tant que fichier, puis aller.

télécharger ensuite à la nouvelle base de données que vous souhaitez dupliquer les données.


Dans un sens PHP strict, la seule façon que je pouvais penser à faire serait d'être l'utilisation de SHOW TABLES et describe {$table} Pour renvoyer tous les noms de champ et les structures des enregistrements, analysez cela, créez vos instructions create table, puis parcourez chaque table et créez des instructions insert.

Je crains que le mieux que je puisse faire pour vous est une sorte de prototype Code que j'imagine serait incroyablement serveur intensif, ce qui est pourquoi je vous recommande d'aller un autre itinéraire.

Quelque chose comme:

<?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); 
    } 

?> 

Ceci est basé sur des this script qui peut être utile pour référence.

J'espère que c'est quelque chose pour vous aider à démarrer, mais je vous suggère de chercher une alternative non PHP.

+0

bien, cela devrait fonctionner comme un travail en php, et ne nécessitant pas d'entrée de l'utilisateur –

+0

J'ai mis à jour ma réponse. –

0
$servername = "localhost"; 
$username = "root"; 
$password = "*******"; 
$dbname = "dbname"; 
$sqlfile = "/path/backupsqlfile.sql"; 

$command='mysql -h' .$servername .' -u' .$username .' -p' .$password .' ' .$dbname .' < ' .$sqlfile; 
exec($command); 
Questions connexes