Copier table vers autre table

Résolu
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

  1. quel méthode as tu utiliser pour copier les tables ?
    0
    1. 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
      1. -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
        1. 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
          1. $link est égal à quoi, car le message d'erreur nous dit que $link ne vaut rien (pas de ressources)
            0
            1. je comprends pas ce que tu dis ???????
              0
            2. $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );

              => tu ne vois pas de $link ?
              0
            3. Si, bien sûr que je le vois ! Mais je ne me suis jamais posé la question "à quoi il sert?" ......
              0
            4. $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
          2. 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
            1. Pour ton deuxième script il suffit d'échapper tes variable grâce à la fonction mysql_real_escape_string.
              0
              1. 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
                1. 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
                  1. 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
                    1. J'ai trouvé ...... je traite dabord num_cj_1, puis num_cj_2 ........ ;o))

                      Merci pour le coup d'main !
                      0