Copier table vers autre table

Résolu
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   -  
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je veux copier une partie de ma table vers une autre table.
Certains enregistrement de ma ta ble comportent des ) ou (, ce qui me crée je pense l'erreur :
Erreur : 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 'ALLEMAND ROMBACH), HAUT-RHIN, FRANCE','572','632')' at line 2
Comment faire ?
Merci.

11 réponses

zazaaz
 
quel méthode as tu utiliser pour copier les tables ?
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
J'ai fait ça :
$req0 = "INSERT INTO mariage_ville (num_indiv,nom,prenom,sexe,num_cj,date_mariage,lieu_mariage,num_pere,num_mere)  
      VALUES ('$num_indiv','$nom','$prenom','$sexe','$num_cj_1','$date_mariage_1','$lieu_mariage_1','$num_pere','$num_mere')"; 
  $result0 = mysql_query($req0,$link) or die ('Erreur : '.mysql_error() );


En fait, j'ai une table dont un enregistrement est composé par l'id, num_indiv, num_cj_1,num_cj_2,num_cj3,..............
Je veux recopier une partie de cette table dans une autre table dont un enregistrement est composé par l'id, num_indiv, num_cj. Si pour un enregistrement de la table1 existe et/ou num_cj_2 et/ou num_cj_3, je crée dans la table 2 le même num_indiv pour num_cj=num_cj_1, num_cj=num_cj_2, num_cj=num_cj_3. J'aurais donc 3 fois le même enregistrement num_cj.
Si j'écris :
$select = 'SELECT * FROM ville_bis'; 
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); 
while ($row = mysql_fetch_array($result))  
{ 
if (!empty($row['num_cj_2'])) 
 {  
$req = 'INSERT INTO mariage_ville (num_indiv,num_cj,date_mariage,lieu_mariage)  
          VALUES ("'.$row['num_indiv'].'","'.$row['num_cj_2'].'","'.$row['date_mariage_2'].'","'.$row['lieu_mariage_2'].'")'; 
$result = mysql_query($req,$link) or die ('Erreur : '.mysql_error() ); 
  } 
} 

j'ai l'erreur : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in sur la ligne du while.
Pourquoi ?
0
zazaaz
 
-utiliise plutot mysql_fetch_assoc au lieu de mysql_fetch_array
-met des addslashes dans tes valeurs insérées :

("'.addslashes($row['num_indiv']).'","'.addslashes($row['num_cj_2']).'","'.addslashes($row['date_mariage_2']).'","'.addslashes($row['lieu_mariage_2']).'")';
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
J'ai le même message d'erreur :
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource sur la ligne du while ......
:(
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zazaaz
 
$link est égal à quoi, car le message d'erreur nous dit que $link ne vaut rien (pas de ressources)
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
je comprends pas ce que tu dis ???????
0
zazaaz
 
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );

=> tu ne vois pas de $link ?
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Si, bien sûr que je le vois ! Mais je ne me suis jamais posé la question "à quoi il sert?" ......
0
Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
 
$link est censé représenter ta connexion mysql à la base de donnée.
Si tu n'est pas connecté, pas étonnant que rien ne fonctionne :D
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Pourtant, voilà mon script :
$host = 'localhost';
$user = 'xxx';
$pass = 'xxx';
$db = 'base';
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

$select = 'SELECT * FROM table';
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
while ($row = mysql_fetch_assoc($result)) 
{
if (!empty($row['num_cj_2']))
	{	
		$req = 'INSERT INTO mariage_ville (num_indiv,num_cj,date_mariage,lieu_mariage) 
		        VALUES ("'.addslashes($row['num_indiv']).'","'.addslashes($row['num_cj_2']).'","'.addslashes($row['date_mariage_2']).'","'.addslashes($row['lieu_mariage_2']).'")';
 		$result = mysql_query($req,$link) or die ('Erreur : '.mysql_error() );
 	}

}

qui m'affiche l'erreur Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource sur le while.
--------------------------------------------------------------------------------------------
J'ai un 2° script, mais si un champ comporte une apostrophe, j'ai l'erreur Erreur : 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
$select = "SELECT num_indiv,num_cj_1,date_mariage_1,lieu_mariage_1 FROM ville_bis";
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
while ($row = mysql_fetch_array($result)) 
{
	$num_indiv = $row['num_indiv'];	
	$num_cj_1 = $row['num_cj_1'];
	$date_mariage_1 = $row['date_mariage_1'];
	$lieu_mariage_1 = $row['lieu_mariage_1'];
	$req0 = "INSERT INTO mariage_ville (num_indiv,num_cj,date_mariage,lieu_mariage) 
		    VALUES ('$num_indiv','$num_cj_1','$date_mariage_1','$lieu_mariage_1')";
 	$result0 = mysql_query($req0,$link) or die ('Erreur : '.mysql_error() );
}

Si j'arrivais à résoudre ce problème d'apostrophe, ce code fonctionnerait peut-être un peu mieux !?
0
Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
 
Pour ton deuxième script il suffit d'échapper tes variable grâce à la fonction mysql_real_escape_string.
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Merci Nhay ! Ca fonctionne mieux .................
Mais reste un problème qui subsiste : ma base doit être trop importante.
J'ai le message Fatal error: Maximum execution time of 30 seconds exceeded.
Sur 45000 enregistrements, il m'en a copié 38000.
Y a t'il possibilité de dépasser le délai de 30s ?
0
Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   126
 
Ta table doit bien avoir un id, fais le plutôt en deux fois en utilisant la clause WHERE, ça sera largement plus simple :)
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Effectivement, j'y avais pas pensé. Et là, ça fonctionne !
Pour corser un peu la chose, si dans ma première table1 un enregistrement num_indiv comporte plusieurs num_cj (num_cj_1, num_cj_2, num_cj_3, num_cj_4),
je veux à chaque fois créer dans ma table2 un enregistrement avec le même num_indiv pour chaque num_cj.
Et là, j'ai le message d'erreur qui revient : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource sur le while. A noter que le 1° num_indiv a été traité correctement avec ses trois num_cj (quelle chance il a) !
$select = "SELECT num_indiv,num_cj_1,date_mariage_1,lieu_mariage_1,num_cj_2,date_mariage_2,lieu_mariage_2,num_cj_3,date_mariage_3,lieu_mariage_3,num_cj_4,date_mariage_4,lieu_mariage_4 FROM ville_bis WHERE id < 2300";
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
while ($row = mysql_fetch_array($result)) 
{
	$num_indiv = $row['num_indiv'];	
	$num_cj_1 = $row['num_cj_1'];
	$date_mariage_1 = $row['date_mariage_1'];
	$lieu_mariage_1 = mysql_real_escape_string($row['lieu_mariage_1']);

	$req0 = "INSERT INTO mariage_ville (num_indiv,num_cj,date_mariage,lieu_mariage) 
		    VALUES ('$num_indiv','$num_cj_1','$date_mariage_1','$lieu_mariage_1')";
 	$result0 = mysql_query($req0,$link) or die ('Erreur : '.mysql_error() );
 	
 	if (!empty($row['num_cj_2']))
	{	
	$num_indiv = $row['num_indiv'];
	$num_cj_2 = $row['num_cj_2'];
	$date_mariage_2 = $row['date_mariage_2'];
	$lieu_mariage_2 = $row['lieu_mariage_2'];
	
		$req = "INSERT INTO mariage_ville (num_indiv,num_cj,date_mariage,lieu_mariage) 
		        VALUES ('$num_indiv','$num_cj_2','$date_mariage_2','$lieu_mariage_2') ";
 		$result = mysql_query($req,$link) or die ('Erreur : '.mysql_error() );
 	}
 	if (!empty($row['num_cj_3']))
	{
	$num_indiv = $row['num_indiv'];
	$num_cj_3 = $row['num_cj_3'];
	$date_mariage_3 = $row['date_mariage_3'];
	$lieu_mariage_3 = $row['lieu_mariage_3'];

		$req1 = "INSERT INTO mariage_ville (num_indiv,num_cj,date_mariage,lieu_mariage) 
		        VALUES ('$num_indiv','$num_cj_3','$date_mariage_3','$lieu_mariage_3') ";
 		$result1 = mysql_query($req1,$link) or die ('Erreur : '.mysql_error() );
 	}
	if (!empty($row['num_cj_4']))
	{
	$num_indiv = $row['num_indiv'];
	$num_cj_4 = $row['num_cj_4'];
	$date_mariage_4 = $row['date_mariage_4'];
	$lieu_mariage_4 = $row['lieu_mariage_4'];

		$req2 = "INSERT INTO mariage_ville (num_indiv,num_cj,date_mariage,lieu_mariage) 
		        VALUES ('$num_indiv','$num_cj_4','$date_mariage_4','$lieu_mariage_4') ";
 		$result2 = mysql_query($req2,$link) or die ('Erreur : '.mysql_error() );
 	}
}
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
J'ai trouvé ...... je traite dabord num_cj_1, puis num_cj_2 ........ ;o))

Merci pour le coup d'main !
0