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



  • 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"


Log in to reply