Question

Je fais une application web PHP dans lequel je suis en utilisant MySQL en tant que serveur de base de données, je veux faire la sauvegarde de certaines tables d'une base à une autre base de données (avec tables que dans celui-ci). j'ai créé deux autre connexion, mais la table est pas mis à jour.

$dbcon1 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD) or die(mysql_error());
$dbase1 = mysql_select_db(TEMP_DB_NAME,$dbcon)or die(mysql_error());

$query1=mysql_query("SELECT * FROM emp");

while($row = mysql_fetch_array($query1, MYSQL_NUM))
{
    $dbcon2 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD) or die(mysql_error());
    $dbase2 = mysql_select_db(TEMP_DB_NAME2,$dbcon)or die(mysql_error());

    mysql_query("INSERT INTO backup_emp VALUES(null,'$row[1]',$row[2])");
    mysql_close($dbcon2);
}

le code ci-dessus est de prendre les données de emp de la première base de données, et updataing dans une autre table de backup_emp d'une autre base de données. le code ne fonctionne pas correctement, est-il une autre façon de le faire ... s'il vous plaît aider.

Était-ce utile?

La solution

Si les deux bases de données, ils sont sur le même serveur, et les tables ont le même schéma, vous devez utiliser cette requête à la place:

mysql_query("INSERT INTO database2.backup_emp SELECT * FROM database1.emp");

De cette façon, vous n'avez pas à vous soucier de connexions de base de données multiples.

Autres conseils

Tout d'abord. Vous ouvrir potentiellement des centaines de connexions, exécution d'une requête et les fermer, pour les rouvrir à nouveau

Prenez la deuxième instruction de connexion de la boucle.

Deuxièmement, vous devez indiquer à PHP, commande qui est destinée à la connexion qui, par exemple:

$query1 = mysql_query("SELECT * FROM emp", $dbcon1);

while($row = mysql_fetch_array($query1, MYSQL_NUM))
{
    mysql_query("INSERT INTO backup_emp VALUES(null,'$row[1]',$row[2])", $dbcon2);
}

Il y a une dernière petite chose. Si les deux connexions vont au même serveur avec le même nom d'utilisateur et le mot de passe, les deux déclarations de mysql_connect se terminera par le même identifiant de connexion

Voilà pourquoi vous aurez besoin pour définir la quatrième déclaration (nouveau lien) dans votre deuxième déclaration de connexion à true:

$dbcon2 = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD, true)
INSERT INTO db2.table SELECT * FROM db1.table

Pourquoi avez-vous ces nombreuses connexions. Cela rend les choses plus compliquées

Vous devez:

  • mettre les lignes de connexion pour le deuxième DB extérieur de la boucle, comme le suggère
  • vous devez spécifier dbcon1 ou 2 dans l'instruction select db
  • ajouter vrai dernier paramètre à la 2ème requête de connexion
  • Testez vos valeurs avant de les insérer (Ne pas oublier index de la ligne commence à zéro en PHP, et non 1).

Probablement travailler comme ceci:

$dbcon1 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD) or die(mysql_error());
$dbase1 = mysql_select_db(TEMP_DB_NAME,$dbcon1) or die(mysql_error());
$dbcon2 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD,true) or die(mysql_error());
$dbase2 = mysql_select_db(TEMP_DB_NAME2,$dbcon2) or die(mysql_error());
$errors= array();

$query1= mysql_query("SELECT * FROM emp");

while($row = mysql_fetch_array($query1, MYSQL_NUM))
{
   if (!isset($row[1])) 
      $row[1]= 'null'; //or generates an error
   else
      $row[1]= "'".$row[1]."'";
   if (!isset($row[2])) $row[2]= 'null'; //or generates an error
   if (mysql_query("INSERT INTO backup_emp VALUES(null,".$row[1].",".$row[2].")") !== true)
      $errors[]= "Problem inserting values (".$row[1].",".$row[2].").");
}
mysql_free_result($query1);
mysql_close($dbcon1);
mysql_close($dbcon2);

Mais si vous ne devez effectuer des calculs supplémentaires, les chèques ou quoi que ce soit d'autre sur les données, la suggestion suivante était très bien aussi:

INSERT INTO db2.table SELECT * FROM db1.table

it helps

^ C

Tout u besoin est de changer une ligne dans le code ur:

$ dbcon2 = mysql_connect (db_server, DB_USER, DB_PASSWORD, true ) ou matrice (mysql_error ());

$dbcon1 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD) or die(mysql_error());
$dbase1 = mysql_select_db(TEMP_DB_NAME,$dbcon)or die(mysql_error());

$query1=mysql_query("SELECT * FROM emp");

while($row = mysql_fetch_array($query1, MYSQL_NUM))
{
    $dbcon2 = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD,true) or die(mysql_error());
    $dbase2 = mysql_select_db(TEMP_DB_NAME2,$dbcon)or die(mysql_error());

    mysql_query("INSERT INTO backup_emp VALUES(null,'$row[1]',$row[2])");
    mysql_close($dbcon2);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top