[Résolu] Fonction pour sauvegarder une base de données



  • Bonjour j'aimerai savoir si quelqu'un pourrait créer une fonction qui lorsqu'elle est appelée fait une sauvegarde de la base de données.

    D'avance, merci ;)



  • Je te la poste dès demain (le temps de la retrouver dans mes programmes :mrgreen: )



  • Merci t'es un chou :p



  • Ah ? C'est pas plus simple de faire l'export de la bdd depuis phpMyAdmin ?



  • Bah c'est pour pouvoir faire des sauvegardes directement depuis le site ;)





  • Sympa.. mais j'ai pas tout compris dans le truc que tu m'as donné. Notamment comment mettre ça en oeuvre.



  • Valà la fonction. L'appel est le suivant:

    string exporter_base(string $database [, string $tables_prefix [, resource $link_identifier]]);

    Elle retourne le code nécessaire à la reproduction des cochons d'inde.
    :mrgreen:
    je suis con, hein? Nan, c'est le code SQL de reproduction de la base. Perso, je te conseille de mettre les deux paramètres optionnels. La ressource de lien MySQL est juste théorique (ça devrait marcher), mais bon, au cas zoù.

    Et le code, maintenant:

    function exporter_base($database,$tables_prefix='',$link_identifier=null) {
       $commentaires[] = "-- -------------------------------------------------------";
       $commentaires[] = "-- - Sauvegarde de base de données";
       $commentaires[] = "-- -------------------------------------------------------";
       $commentaires[] = "-- - Date de création: ".date("d/m/Y H:i");
       $commentaires[] = "-- - Nom de la base de données: ".$database;
       $commentaires[] = "-- -------------------------------------------------------";
       $commentaires[] = "-- - Tables sauvegardées"
    
       mysql_select_db($database,$link_identifier);
       $tables = mysql_list_tables($database,$link_identifier);
       while($donnees = mysql_fetch_array($tables)) {
          $table = $donnees[0];
          if(preg_match('#^'.preg_quote($tables_prefix).'(.*)$#',$table)) {
             $commentaires[] = "-- - >> ".$table;
             $res = mysql_query("SHOW CREATE TABLE ".$table,$link_identifier);
             if ($res) {
                $insertions = "";
                $tableau = mysql_fetch_row($res);
                $tableau[1] .= ";"."nn";
                $dumpsql[] = $tableau[1];
                $req_table = mysql_query("SELECT * FROM ".$table,$link_identifier);
                $nbr_champs = mysql_num_fields($req_table);
                while($ligne = mysql_fetch_row($req_table)) {
                   $insertions .= "INSERT INTO ".$table." VALUES(";
                   for ($i=0; $i<=$nbr_champs-1; $i++) {
                      $ligne[$i]   = str_replace("'","''",$ligne[$i]);
                      $insertions .= "'".$ligne[$i]. "', ";
                   }
                   $insertions = substr($insertions, 0, -2);
                   $insertions .= ");nn";
                }
                if ($insertions != "")
                {
                $dumpsql[] = $insertions;
                }
             }
          } else $commentaires[] = '-- - >> (non sauvegardée) '.$table;
       }
       $resultat = implode("", $dumpsql);
       $resultat = implode("n", $commentaires)."nn".$resultat;
       return $resultat;
    }
    


  • Ok donc si j'ai bien compris $resultat contient le texte que je dois enregistrer dans mon fichier sauvegarde_la_date_et_lheure.sql

    Merci je devrai pouvoir m'en sortir… Enfin je crois :P



  • Un code simple qui l'utilise:

    <?php
    $db = mysql_connect('localhost','username','password');
    
    echo exporter_base('forum','phpbb_',$db);
    
    ?>
    ```et hop, tu aura un export de ton site phpbb (c'est qu'un exemple)


  • Euh une petite question… A quoi sert le préfix dans ta fonction ?



  • C'est au cas où tu ne voudrais sélectionner que les tables qui commencent par un certain prefixe (à l'origine, je l'avais codée pour darkness, et le prefixe était 'darkcms_'). Ca permet de cibler la sauvegarde.



  • Et si on veux cibler toutes les tables on laisse le préfixe vide ?



  • yep



  • Merci arcanis ;)

    PS : Ajout du tag "Résolu"


Se connecter pour répondre
 

Il semble que votre connexion ait été perdue, veuillez patienter pendant que nous vous re-connectons.