Restauration BBD ne fonctionne pas

Résolu
LiTtLeBuBu Messages postés 50 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 10 février 2009 - 18 janv. 2008 à 10:35
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 - 21 janv. 2008 à 17:32
Bonjour,

Voila j'ai récupérer un script sur le site pour sauvegarder ma BDD. J'ai modifié le script pour enlever les fonctions envoi par mail et FTP. J'ai aussi modifier $sql_header pour y rajouter des infos style phpmyadmin.

Les sauvgardes fonctionnent mais pas leur restauration.
#1064 - Erreur de syntaxe pr?s de 'CREATE TABLE `referer` (
  `id` smallint(4) NOT NULL auto_inc' ? la ligne 21

Voici le script:

// DUMP SQL
function saveDB($mysql_array = array()){

$mysql_host = $mysql_array[0];
$mysql_user = $mysql_array[1];
$mysql_password = $mysql_array[2];

error_reporting(0);
$err_msg = '';
$maxinsert = 500;

if (!empty($mail_array)){
$mail = $mail_array[0];
$attachement = $mail_array[1];
}

if(!$link = mysql_connect($mysql_host,$mysql_user,$mysql_password))
$err_msg .= 'Impossible de se connecter à '.$mysql_host."\n";
else{
$testfile = 'backup_sql/'.uniqid(mt_rand()).'.tmp';
if (!$handle = fopen($testfile,'w'))
$err_msg .= 'Impossible d\'ouvrir un fichier en écriture dans le répertoire "backup_sql/"'."\n";
else
fclose($handle);

if (file_exists($testfile)) unlink($testfile);

if ($err_msg == ''){
$db_list = mysql_list_dbs($link);
$names = array();

while ($row = mysql_fetch_object($db_list)) {
if ($row->Database != 'information_schema'){
$q = 'SHOW CREATE DATABASE `'.($row->Database).'`';
$r = mysql_query($q);

while ($s=mysql_fetch_object($r)){
$filename = 'BackupSQL_'.($row->Database).'_'.date('d-m-Y').'.sql';
$names[] = $filename;
if (!$handle = fopen('backup_sql/'.$filename, 'w'))
$err_msg .= 'Impossible d\'ouvrir en écriture le fichier sql de '.($row->Database)."\n";
else{

$sql_header .= '# SQL Dump par script PHP'."\n";
$sql_header .= '# http://www.******.com'."\n";
$sql_header .= '#'."\n";
$sql_header .= '# Serveur: sql.*****.fr'."\n";
$sql_header .= '# Généré le '.date('d-m-Y à H:i:s').''."\n";
$sql_header .= '# Version du serveur PHP: '.phpversion().''."\n";
$sql_header .= '# Version de Mysql: '.mysql_get_server_info().''."\n";
$sql_header .= '#'."\n";
$sql_header .= '# Base de données: `'.($row->Database).'`'."\n";
$sql_header .= '#'."\n";
$sql_header .= '#'."\n\n";
$sql_header .= $s->{'Create Database'}.";\n\n";

if (fwrite($handle, $sql_header) === FALSE)
$err_msg .= 'Impossible d\'écrire dans le fichier sql de '.($row->Database)."\n";
else{
mysql_select_db($row->Database, $link);

$q3 = 'SHOW TABLES';
$r3 = mysql_query($q3);

while ($s3 = mysql_fetch_object($r3)){
$table = $s3->{'Tables_in_'.($row->Database)};
$q4 = 'SHOW CREATE TABLE `'.$table.'`;';
$r4 = mysql_query($q4);

while ($s4 = mysql_fetch_object($r4)){
$sql_export = '';
$sql_export .= '# ---------------------------------------------------'."\n\n";
$sql_export .= '#'."\n";
$sql_export .= '# Structure de la table `'.$table.'`'."\n";
$sql_export .= '#'."\n\n";
$sql_export .= $s4->{'Create Table'}."\n\n";

$q5 = 'SELECT * FROM `'.$table.'`;';
$r5 = mysql_query($q5);

$slashes = array();
    $nbfields = mysql_num_fields($r5);
for($i=0; $i < $nbfields; $i++)
if (in_array(mysql_field_type($r5, $i), array('string','blob')))
$slashes[$i] = '\'';

$count = 0;

while($s5 = mysql_fetch_array($r5)){
$count++;

$sql_export .= '#'."\n";
$sql_export .= '# Contenu de la table `'.$table.'`'."\n";
$sql_export .= '#'."\n\n";

$sql_export .= 'INSERT INTO `'.$table.'` VALUES(';
$sql_export .= $slashes[0].mysql_real_escape_string($s5[0]).$slashes[0];
for($i=1; $i < $nbfields; $i++)
$sql_export .= ', '.$slashes[$i].mysql_real_escape_string($s5[$i]).$slashes[$i];

$sql_export .=  ");\n";

if($count == $maxinsert){
if (fwrite($handle, $sql_export) === FALSE){
$err_msg .= 'Erreur d\'exportation avec la '.$table.' de la base '.($row->Database)."\n";

}
else
$sql_export = '';
}
}
$sql_export .= "\n";

if (fwrite($handle, $sql_export) === FALSE)
$err_msg .= 'Erreur d\'exportation avec la '.$table.' de la base '.($row->Database)."\n";
}
}
}
fclose($handle);
}
}
}
}
}
}
}

$mysql_data = array(SERVEUR,NAME,PASS);

MERCI et @+

16 réponses

codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
21 janv. 2008 à 15:25
A vue d'oeil, je dirai que ton script ne met pas de ; à la fin des create, alors qu'il le faut (c'est ce qui permet à sql de savoir où la nouvelle requete commence !)

"ENGINE=MyISAM DEFAULT CHARSET=utf8"
3
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
21 janv. 2008 à 17:32
ca c'est un probleme d'encodage : il faut que tu récupere le type d'encodage de ta bdd, et que tu fasse un fichier qui ait le meme type d'encodage, ou que tu encode les données de la bdd dans le même format.

Regarde du coté de
utf8_encode et utf8_decode

Content que tu ai solutionné le probleme ! :)
3
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
18 janv. 2008 à 10:53
1. Ouvre ton fichier et regarde la tête de la table `referer`
2. Vas dans phpmyadmin et fais un SHOW CREATE TABLE `referer`
3. Compare les 2

*****
noisy communication - wherever, be everywhere!
0
LiTtLeBuBu Messages postés 50 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 10 février 2009
18 janv. 2008 à 11:11
Phpmyadmin:
CREATE TABLE `referer` (\n  `id` smallint(4) NOT NULL auto_increment,\n

Script:
'CREATE TABLE `referer` (   `id` smallint(4) NOT NULL auto_increment,

Voic les différences les \n
0

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

Posez votre question
LiTtLeBuBu Messages postés 50 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 10 février 2009
18 janv. 2008 à 22:03
Pas d'infos du pourquoi et du comment ???
0
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
19 janv. 2008 à 11:32
les \n ne changent rien, le problème est ailleurs...

*****
noisy communication - wherever, be everywhere!
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
21 janv. 2008 à 12:10
est-ce que tu insère plusieures tables ?
Si tu fait une requete de création de plusieurs tables sur la meme requete, en php avec mysql_query, ca passe pas, c'est ptete ca ?
Il faut découper chaques requetes en plusieures requetes et non plusieurs séparées par des ;
0
LiTtLeBuBu Messages postés 50 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 10 février 2009
21 janv. 2008 à 12:41
Je bute et ne trouve pas le soucis !
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
21 janv. 2008 à 12:45
la requete qui plante, c'est juste UN seul insert ? ou c'est PLUSIEURS insert ?
0
LiTtLeBuBu Messages postés 50 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 10 février 2009
21 janv. 2008 à 13:04
Ca plante dès la permière requête.
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
21 janv. 2008 à 13:52
mais ce que je veux dire, c'est s'il tu fait plusieurs requetes d'un coup, genre

mysql_query ("create....; create....;create....");
ou si tu fait
mysql_query ("create.....;");
mysql_query ("create ....;");
mysql_query ("create ....;");

Car la premiere méthode ne marche pas avec la fonction mysql_query !
0
LiTtLeBuBu Messages postés 50 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 10 février 2009
21 janv. 2008 à 14:39
J'essaye de faire la restauration avec phpmyadmin en lui précisant le fichier que j'ai sauvegardé via le script.
0
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
21 janv. 2008 à 14:41
Si j'ai bien compris tu exporte ta bdd avec ton script, et tu essaye ensuite de l'importer dans phpmyadmin ?

Si c'est le cas c'est possible de voir le fichier généré par ton script en entier ? (si ya pas des trucs indiscrets :p)
0
LiTtLeBuBu Messages postés 50 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 10 février 2009
21 janv. 2008 à 15:21
# SQL Dump par script PHP
# http://www.******.com
#
# Serveur: sql.******.fr
# Généré le 06-01-2008 à 20:03:03
# Version du serveur PHP: 4.3.11
# Version de Mysql: 4.1.16-Max
#
# Base de données: `*******`
#
#


CREATE DATABASE `*********` /*!40100 DEFAULT CHARACTER SET utf8 */;


# ---------------------------------------------------


#
# Structure de la table `last_connect`
#


CREATE TABLE `last_connect` (
  `ip` varchar(15) NOT NULL default '0.0.0.0',
  `date` date NOT NULL default '0000-00-00'
) ENGINE=MyISAM DEFAULT CHARSET=utf8


#
# Contenu de la table `last_connect`
#


INSERT INTO `last_connect` VALUES('**.***.***.***', 2008-01-06);


# ---------------------------------------------------


#
# Structure de la table `ref_client`
#


CREATE TABLE `ref_client` (
  `id` smallint(4) NOT NULL auto_increment,
  `nom` varchar(100) NOT NULL default '',
  `ville` varchar(100) NOT NULL default '',
  `date` date NOT NULL default '0000-00-00',
  `photo1` varchar(255) NOT NULL default '',
  `text1` varchar(60) NOT NULL default '',
  `photo2` varchar(255) NOT NULL default '',
  `text2` varchar(60) NOT NULL default '',
  `photo3` varchar(255) NOT NULL default '',
  `text3` varchar(60) NOT NULL default '',
  `photo4` varchar(255) NOT NULL default '',
  `text4` varchar(60) NOT NULL default '',
  `photo5` varchar(255) NOT NULL default '',
  `text5` varchar(60) NOT NULL default '',
  `photo6` varchar(255) NOT NULL default '',
  `text6` varchar(60) NOT NULL default '',
  `description` text NOT NULL,
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8


#
# Contenu de la table `ref_client`
#


INSERT INTO `ref_client` VALUES(4, '******', '****', 2006-11-12, '*****_1_456789AZ_06032007071.jpg', 'Accenderat super his incitatum propositum ad nocendum', '******_2_3456789A_06032007072.jpg', 'Et eodem impetu Domitianum praecipitem per scalas', '******_3_fghijklm_P1010016.JPG', 'Isdem diebus Apollinaris Domitiani gener paulo ante', '******_4_DSQWXCVB_P1010006.JPG', 'Quod cum ita sit, paucae domus studiorum seriis', '******_5_defghijk_06032007070.jpg', 'Nunc vero inanes flatus quorundam vile esse quicquid', '*******_6_fghijklm_PA270027.JPG', 'Excogitatum est super his, ut homines quidam ignoti', 'Hacque adfabilitate confisus cum eadem postridie feceris, ut incognitus haerebis et repentinus, hortatore illo hesterno clientes numerando, qui sis vel unde venias diutius ambigente agnitus vero tandem et adscitus in amicitiam si te salutandi adsiduitati dederis triennio indiscretus et per tot dierum defueris tempus, reverteris ad paria perferenda, nec ubi esses interrogatus et quo tandem miser discesseris, aetatem omnem frustra in stipite conteres summittendo.

\r\nHorum adventum praedocti speculationibus fidis rectores militum tessera data sollemni armatos omnes celeri eduxere procursu et agiliter praeterito Calycadni fluminis ponte, cuius undarum magnitudo murorum adluit turres, in speciem locavere pugnandi. neque tamen exiluit quisquam nec permissus est congredi. formidabatur enim flagrans vesania manus et superior numero et ruitura sine respectu salutis in ferrum.

\r\nIdeo urbs venerabilis post superbas efferatarum gentium cervices oppressas latasque leges fundamenta libertatis et retinacula sempiterna velut frugi parens et prudens et dives Caesaribus tamquam liberis suis regenda patrimonii iura permisit.

');
0
LiTtLeBuBu Messages postés 50 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 10 février 2009
21 janv. 2008 à 15:34
ok je vais essayer celà
0
LiTtLeBuBu Messages postés 50 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 10 février 2009
21 janv. 2008 à 17:26
Ok merci celà fonctionne maintenant. Sinon quand je restaure la base il me remplace les é par des ?. Comment évitez celà ?
0
Rejoignez-nous