par
mat10000 » 09 juil. 2006, 11:09
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 ' 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
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]INSERT INTO fichier VALUES('39', '29', './data/plan_d'acces.jpg', '');[/code]
c'est le ' qui pose problème, ça correspond à un apostrophe.
Voici le script PHP que j'utilise pour insérer le fichier:
[php]<?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();
?>[/php]
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]<?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);
?>[/php]
meric à tous et bon dimanche