Page 1 sur 1

insérer un fichier dump dans une base de données

Posté : 09 juil. 2006, 11:09
par mat10000
Bonjour à tous,

Dans un premier temps j'effectue un dump d'une base de données. Ce dump est enregistré dans un fichier dump.sql

Par la suite j'essaie d'insérer ce fichier dans une autre base de données, en ayant vider cette base auparavant.

Mon problème est qu'il refuse d'insérer le fichier à cause de caractères spéciaux.

Par exemple voici une des lignes du fichier dump.sql

Code : Tout sélectionner

INSERT INTO fichier VALUES('39', '29', './data/plan_d'acces.jpg', '');
c'est le &#39 qui pose problème, ça correspond à un apostrophe.

Voici le script PHP que j'utilise pour insérer le fichier:
<?php
include_once "connexionBDD.php";

$deleteQuery="DROP TABLE fichier";
if ($res=mysql_query($deleteQuery)) echo "true".$res; else echo "false".$res;
mysql_error();

$handle = fopen("dump.sql", "rb");
$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);

$contents=str_replace("(,", "( NULL,", $contents);
$contents=str_replace(", , )", ", NULL, NULL )", $contents);
$contents=str_replace(", ,", ", NULL,", $contents);
$contents=str_replace(", ,", ", NULL,", $contents);
if ($res=mysql_query($contents)) echo "true".$res; else echo "false".$res;

echo $contents;
mysql_error();
?>
avez vous une petite idée pour résoudre ce problème?

EDIT: le problème viendrait de l'écriture du fichier dump.sql ou de la manière dont je le récupère?
voici comment je récupère les informations de ma base.
Je génère un fllux que je récupère dans director, et je crée le fichier dump.sql sur mon pc grace à director. Après vérification le fichier est encodé en ANSI.
<?php
$host = "host_name";  
$user = "user_name";
$bdd = "bdd_name";
$passwd  = "password";
	
function dumpMySQL($serveur, $login, $password, $base, $mode)
{
   $connexion = mysql_connect($serveur, $login, $password);
   mysql_select_db($base, $connexion);
   
   $creations = "";
   $insertions = "\n\n";
   
   $listeTables = mysql_query("show tables", $connexion);
   while($table = mysql_fetch_array($listeTables))
   {
      if($mode == 1 || $mode == 3)
      {
         $listeCreationsTables = mysql_query("show create table ".$table[0], $connexion);
         while($creationTable = mysql_fetch_array($listeCreationsTables))
         {
           $creations .= $creationTable[1].";\n\n";
         }
      }
      if($mode > 1)
      {
         $donnees = mysql_query("SELECT * FROM ".$table[0]);
         $insertions .= "-- insertions dans la table ".$table[0]."\n";
         $insertions .= "-- -----------------------------\n";*/
         while($nuplet = mysql_fetch_array($donnees))
         {
            $insertions .= "INSERT INTO ".$table[0]." VALUES(";
            for($i=0; $i < mysql_num_fields($donnees); $i++)
            {
              if($i != 0)
                 $insertions .=  ", ";             
                 $insertions .=  "'";
                $insertions .= addslashes($nuplet[$i]);
                $insertions .=  "'";
            }
            $insertions .=  ");\n";
         }
         $insertions .= "\n";
      }
   }

   mysql_close($connexion);
   echo $entete . $creations .$insertions;
}
dumpMySQL($DBServer, $user, $passwd, $bdd, 3);
?>

meric à tous et bon dimanche

Posté : 09 juil. 2006, 17:19
par mat10000
j'ai essayé en ajoutant ceci avant la requête d'insertion mais ça n'y fait rien:
$contents=utf8_encode($contents); 

Posté : 11 juil. 2006, 08:25
par mat10000
bonjour à tous, j'avance doucement.
J'ai fait en sorte que mes caractères apostrophes ne soient plus enregistré en tant que ' mais plutôt \'

Lorsque je lance l'import via mon script php ça ne fonctionne pas, par contre si je fais un copier coller de ma requête dans phpmyadmin ça fonctionne....

voua avez une petite idée?

merci à tous et bonne journée

Posté : 11 juil. 2006, 09:05
par zeus
Normalement, le contenu d'un fichier dump est une suite de requete SQL, tu devaris donc pouvoir l'exécuter directement dans phpMyAdmin

Sinon, pour insérer un \ devant tous les caractères spéciaux, tu peut utiliser la fonction addslashes()

L'utilisation de cette fonction est toujours recommandée avant d'exécuter une requete (a condition que le magic_quote_gpc soit désactivé sur le serveur)

Posté : 11 juil. 2006, 20:10
par Invité
oui c'est en effet ce que j'ai fait.
Mon fichier sql fonctionne dans phpmyadmin mais ne fonctionnait pas dans ma requêtes et ce pour une réison simple et totalement idiote de ma part. Comme tu l'as bien fait remarquer il s'agit de plusieurs requêtes alors que mysql_query n'en traine qu'une seule.
J'ai donc fais un split sur mon fichier suivi d'un mysql_query sur mon tableau et tout fonctionne parfaitement maintenant