Backup mysql en php

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 162 fois - Téléchargée 16 fois

Contenu du snippet

Ce script permet de sauvagarder une base Mysql et ses tables .
Il est configuré par défaut pour Easyphp en local .

Source / Exemple :


<?php ob_start();
$nom_de_la_base ='test';
define('FC',date('d').'-'.date('m').'-'.date('Y').'.php');

define('H','localhost');define('N','root');define('P','');define('T',$nom_de_la_base);
$cnt = mysql_connect(H,N,P)or die(mysql_error());mysql_select_db(T,$cnt)or die(mysql_error());

echo 'DROP DATABASE IF EXISTS `'.$nom_de_la_base.'`;
CREATE DATABASE `'.$nom_de_la_base.'` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `'.$nom_de_la_base.'`;'."\n\n";

$aa = mysql_query('show tables');while ($a = mysql_fetch_row($aa)){
$bb = mysql_query('SELECT * FROM '.$a[0].''); $tt = mysql_num_rows($bb); $nb = mysql_num_fields($bb);

echo 'DROP TABLE IF EXISTS `'.$a[0].'`;';
$sct = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$a[0].''));
echo "\n".$sct[1].";\n\n";

if($tt > 0){ echo 'INSERT INTO '.$a[0].' VALUES';

$t=0;while( $b = mysql_fetch_array($bb)){ echo '(';
for($i = 0; $i < $nb; $i++){if($i == 0){echo "'$b[$i]'";} else { echo ',\''.mysql_real_escape_string($b[$i]).'\'';}}
$t++; if($t < $tt){ echo '),'."\n";} else {echo ');'."\n";}}

echo "\n\n\n"; }}

define('FP',fopen(FC,'w')); fwrite(FP,ob_get_contents());fclose(FP);ob_end_clean(); ?>

A voir également

Ajouter un commentaire

Commentaires

masternico
Messages postés
494
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
1 septembre 2011

hmmm...
On tourne un peut en rond ici ;)
Ce que je voulais dire ne s'applique pas uniquement à l'injection. En fait, lorsque je fait une requette, je protège systématiquement les données avec mysql_real_escape_string parceque sinon la requette peut planter. Pour illustrer, voici un exemple:
$clients_nom = 'Bouchard';
$clients_prenom = 'Gérard';
$requette = 'INSERT INTO `clients` (`clients_nom`,`clients_prenom`) VALUES (\'' . $clients_nom . '\',\'' . $clients_prenom . '\')';
$db_resource = mysql_query($requette);

Pas de problème. Mais si on change les valeurs:
$clients_nom = 'l\'enruhmé'; //ne rigolez pas je connais qqu'un qui s'appelle comme ça
$clients_prenom = 'Gérard';

$requette = 'INSERT INTO `clients` (`clients_nom`,`clients_prenom`) VALUES (\'' . $clients_nom . '\',\'' . $clients_prenom . '\')';
$db_resource = mysql_query($requette);

Là ça plante, donc il faut:
$requette = 'INSERT INTO `clients` (`clients_nom`,`clients_prenom`) VALUES (\'' . mysql_real_escape_string($clients_nom) . '\',\'' . mysql_real_escape_string($clients_prenom) . '\')';
brouno
Messages postés
8
Date d'inscription
mercredi 29 juin 2005
Statut
Membre
Dernière intervention
16 septembre 2005

D'ici peu , je mettrai le code a jour avec create table ,
cette fonction est si précise dans son résultat que je suis a peu près sur qu'elle nous vient de mysqldump

je doit ahjouter également en entête le charset de la table et l'inter classement ou collation ,
afin d'éviter les conflits possibles .
Pour l'écriture du backup , il n'y a bien sur aucun danger en cas d'injection sql enregistrée , c'est au moment de la restauration , ce sera la deuxième étape .
masternico
Messages postés
494
Date d'inscription
dimanche 5 octobre 2003
Statut
Membre
Dernière intervention
1 septembre 2011

+1 pour neigedhiver.
Pour protéger une requette mysql il faut utiliser mysql_real_escape_string($requette) sans quoi ça rique de coincer
neigedhiver
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Des fois j'ai l'impression de ne pas être lu. Pourtant on me répond...

A ce que tu dis, je ne peux que répondre le contenu de mon message précédent...
brouno
Messages postés
8
Date d'inscription
mercredi 29 juin 2005
Statut
Membre
Dernière intervention
16 septembre 2005

Dangereux , non , il s'agit simplement d'une fonction d'échappement devant des caractères spéciaux , les injections sql peuvent étre très complexes , quelquefois le signe - est utilisé , preg_quote s'en occupe .
Il s'agit ni plus ni moins d'une fonction sur une chaine de type string , opérationnelle sous php .
Quand au danger d'injections réinjectées , la oui , je ne suis pas sur de moi ,
faut voir .

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.