{MySQL} Transfert d'infos d'1 table a 1 autre

Fermé
moi - 20 oct. 2009 à 14:57
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 - 21 oct. 2009 à 18:16
Salut tout le monde,

bon alors je viens vers vous car j'ai un petit soucis avec mes bases de données qui vient de je ne sais pas où...

Des que j'essaye de transferer les infos d'une table se trouvant dans une base à une table se trouvant dans une autre, je perds entre 1/3 et la moitié de mes entrées, et je ne comprends pas pourquoi...

Voici mon code:

<?php
$nom_table = $_POST['nom_table'];

$base1 = mysql_connect("", "", "");
mysql_select_db('', $base1);

$base2 = mysql_connect("", "", "");
mysql_select_db('', $base2);


$reponse = mysql_query("SELECT * FROM $nom_table", $base1) or exit(mysql_error());
while ($donnees = mysql_fetch_array($reponse))
{
$titre = $donnees['titre'];
$lien = $donnees['lien'];
$id = $donnees['id'];


?>
<font color="black"><?php
echo $titre ;?><br/><?php
echo $id ;?><br/></font><?php

if (mysql_query ("INSERT INTO $nom_table (episode, titre, lien, timestamp) VALUES ('" . $id . "', '" . $titre . "', '" . $lien . "', '" . time() ."')", $base2))
{
echo 'Ouais !';
}
else
{
echo 'ca a merdé';
}
}
mysql_close($base1);
mysql_close($base2);
?>


Avec ce code, je n'ai récupéré que 14 des 22 entrées de ma table test.

La table de ma base A a 3 champs: id (mediumint), titre (text), lien (text);

La table de ma base B en a 7 : id (bigint), episode (text), titre (text), lien (text), lecteur (text), pseudo (varchar 25) et timestamp (timestamp 14).

Si quelqu'un a une idée, ca serait sympa de bien vouloir m'aider.

D'avance merci pour votre aide.

@+
A voir également:

4 réponses

web_dev_2009 Messages postés 2 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 20 octobre 2009
20 oct. 2009 à 15:32
bonjour c'est normal que tu perd tes information tu as mis les résultat de ta requête dans une variable ,je te conseille de les mettre dans un tableau ex :
while ($donnees = mysql_fetch_array($reponse))
{
$titre[] = $donnees['titre'];
$lien []= $donnees['lien'];
$id []= $donnees['id'];
}
,après tu fais ta deuxième requête d'insertion dans la base 2
$size=mysql_num_rows($reponse);//pour avoir la taille du tableau

for($i=0;$i<=$size;$i++)
{
mysql_query ("INSERT INTO $nom_table (episode, titre, lien, timestamp) VALUES ('" . $id[$i]. "', '" . $titre[$i] . "', '" . $lien[$i] . "', '" . time() ."')", $base2));
}
j'espère que ça va marcher
0
Salut Web Dev et merci pour ta réponse,

je vais essayer ca de suite et je te redis si ca fonctionne.

Encore merci pour ton aide.
0
Re,

j'ai essayé ta méthode mais ca ne marche pas... Vois tu une erreur dans mon code ?

<?php

$nom_table = $_POST['nom_table'];

$base1 = mysql_connect();
mysql_select_db();

$base2 = mysql_connect();
mysql_select_db();


$reponse = mysql_query('SELECT * FROM $nom_table', $base1) or exit(mysql_error());
while ($donnees = mysql_fetch_array($reponse))
{
$titre[] = $donnees['titre'];
$lien []= $donnees['lien'];
$id []= $donnees['id'];
}

$size=mysql_num_rows($reponse);

for($i=0;$i<=$size;$i++)
{
mysql_query ("INSERT INTO $nom_table (episode, titre, lien) VALUES ('" . $id[$i]. "', '" . $titre[$i] . "', '" . $lien[$i] . "')", $base2);

}

mysql_close($base1);
mysql_close($base2);
?>

Encore merci pour ton aide.
0
web_dev_2009 Messages postés 2 Date d'inscription mardi 20 octobre 2009 Statut Membre Dernière intervention 20 octobre 2009 > moi
20 oct. 2009 à 16:08
je t'ai donner que les grandes lignes ,il faut déclarer tes trois tableaux
$titre[] = array();
$lien []= array();
$id []= array();
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
20 oct. 2009 à 19:50
Avec INSERT SELECT, ce serait beaucoup plus simple.

INSERT INTO bddX.tableX (ccol1,col2, col3, ..) 
SELECT col1, col2, col3, .. FROM bddY.tableY;
0
Salut tout le monde et merci pour vos réponses.

Bon alors j'ai finalement réussi a trouvé une méthode qui fonctionne a peu près... Sauf que si j'essaie de copier ma table test, je n'ai que 14 des 22 entrées qui sont copiées...

Voila mon code :

<?php
$nom_table = $_POST['nom_table'];

$base1 = mysql_connect("");
mysql_select_db('', $base1);

$base2 = mysql_connect("");
mysql_select_db('', $base2);


$reponse = mysql_query("SELECT id,titre,lien FROM $nom_table", $base1) or exit(mysql_error());
while ($donnees = mysql_fetch_array($reponse))
{
$titre = $donnees['titre'];
$lien = $donnees['lien'];
$id = $donnees['id'];

if (mysql_query ("INSERT INTO $nom_table (episode,titre,lien) VALUES ('" . $id . "', '" . $titre . "', '" . $lien . "')", $base2)
)
{
echo 'Ouais !';
}
else
{
echo 'ca a merdé';
}
}
mysql_close($base1);
mysql_close($base2);
?>

Alors voila ce qu'on m'a conseillé sur le site du zéro : "Vérifies les options de nombre de requêtes possibles, et du max time pour MySQL"

Quelqu'un sait-il comment faire ces vérifications ?

Merci d'avance pour vos réponses.

Bonne journée a tous
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
21 oct. 2009 à 12:17
Rien à voir avec le nombres de requetes ou d'un max time...

Avec INSERT SELECT, ce serait beaucoup plus simple.

 // LA VALEUR DE CETTE CHAINE EST À CONTROLER IMPÉRATIVEMENT (lettres, chiffres et underscore)
$table = $_POST['nom_table'];

$host = 'localhost';
$user = 'root';
$password = 'ton-mot-de-passe';

$base1 = 'nom-de-la-bdd-d'origine';
$base2 = 'nom-de-la-bdd-de-destination';

mysql_connect($host, $user, $password);

$sql = 'INSERT INTO ' . $base2 . '.' . $table . '(episode, titre, lien)
SELECT id, titre, lien FROM ' . $base1 . '.' . $table;

$result = mysql_query($sql) or exit(mysql_error());

echo mysql_affected_rows() . ' enregistrements ont été effectués.';
0
Salut P@t@ch0n,

merci pour tes réponses (j'avais essayé la première hier mais sans succés...).

J'ai fait pleins d'essais a partir de ce que tu m'as conseillé mais j'arrive pas à trouver le problème.
Voici mon code :

<?php
$nom_table = $_POST['nom_table'];

$base1 = mysql_connect("", "", "");
mysql_select_db('', $base1);

$base2 = mysql_connect("", "", "");
mysql_select_db('', $base2);

$sql = 'INSERT INTO ' . $base2 . '.' . $table . '(episode, titre, lien)
SELECT id, titre, lien FROM ' . $base1 . '.' . $table;

$result = mysql_query($sql) or exit(mysql_error());


echo mysql_affected_rows() . ' enregistrements ont été effectués.';

mysql_close($base1);
mysql_close($base2);
?>

et l'erreur qui apparait :

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'id #2.(episode, titre, lien) SELECT id, titre, lien FROM Resou

(le "Resou" je sais pas d'ou il me sort ca...)

Si tu as une idée, elle est la bienvenue. :-)

Sinon j'ai un autre petit problème sur lequel je penche et pour lequel tu pourras surement m'aider (si ca ne te derange pas, bien sur) : je cherche une requete qui me permette de copier les infos se trouvant dans le champ id (1,2,3,4,5...) et de les copier dans le champ episode. J'ai essayé ca :

<?php


mysql_connect("", "", "");
mysql_select_db('');

$reponse = mysql_query('SELECT id FROM $nom_table') or exit(mysql_error());
$donnees = mysql_fetch_array($reponse);

$nom_table = $_POST['nom_table'];

mysql_query (UPDATE $nom_table SET episode=id);

mysql_close();
?>

Mais ca ne marche pas, j'ai l'erreur suivante qui apparait :

Parse error: syntax error, unexpected T_VARIABLE in /homepages/9/d264352590/htdocs/administration/test/test4.php on line 12

(la ligne 12 c'est celle ou ya mysql_query)

Aurais tu une petite idée pour résoudre ce problème.

Un grand merci d'avance pour ton aide précieuse.
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
21 oct. 2009 à 18:16
Salut,

$base1 et $base2 sont les noms des bases de données, pas des ressources renvoyées par mysql_select_db().

Tu n'as pas besoin dans l'absolu d'utiliser mysql_select_db(), et une connexion à mysql suffit.

Pour ton second problème, c'est on ne peut plus simple.

Une seule requête, la première que tu as faites ne sert à rien.

Ton erreur vient du fait que tu as certainement omis que les chaines entre apostrophes ne sont pas évaluées par php.
0