PRATIQUE PHP 
Récupérer le contenu d'une base MySQL directement avec PHP
 
"Comment sauvegarder une base de données MySQL depuis un serveur mutualisé, sans passer par phpMyAdmin ?" (05/03/2005)
  Forum

Réagissez dans les forums de JDN Développeurs

Il existe deux manières de passer outre phpMyAdmin pour sauvegarder ses tables : passer directement par la commande mysqldump, ou utiliser un script PHP qui récupère le contenu de ces bases (un équivalent simplissime de phpMyAdmin, donc).

mysqldump a déjà été présenté dans nos colonnes (lire l'article du 22/11/2004), aussi nous allons nous contenter de présenter un script qui sauvegarde le contenu des tables d'une base de données précise (et non de toutes les bases accessibles à l'utilisateur...) dans un fichier texte placé au même niveau que le script, et que le webmaster pourra télécharger comme tout autre fichier. Ce fichier servira à recréer la base du début à la fin en cas de problème majeur avec MySQL. Il sera nommé du nom de la base sauvegardée, et de la date de la sauvegarde...

<?php
function mysql_structure() {
  $host = 'localhost';
  $user = 'root';
  $pass = '';
  $base = 'test2';
  
  mysql_connect($host, $user, $pass);
  mysql_select_db($base);
  $tables = mysql_list_tables($base);
  while ($donnees = mysql_fetch_array($tables))
    {
    $table = $donnees[0];
    $res = mysql_query("SHOW CREATE TABLE $table");
    if ($res)
      {
      $insertions = "";
      $tableau = mysql_fetch_array($res);
      $tableau[1] .= ";";
      $dumpsql[] = str_replace("\n", "", $tableau[1]);
      $req_table = mysql_query("SELECT * FROM $table");
      $nbr_champs = mysql_num_fields($req_table);
      while ($ligne = mysql_fetch_array($req_table))
        {
        $insertions .= "INSERT INTO $table VALUES(";
        for ($i=0; $i<=$nbr_champs-1; $i++)
          {
          $insertions .= "'" . mysql_real_escape_string($ligne[$i]) . "', ";
          }
        $insertions = substr($insertions, 0, -2);
        $insertions .= ");\n";
        }
      if ($insertions != "")
        {
        $dumpsql[] = $insertions;
        }
      }
    }
  return implode("\r", $dumpsql);
  }

echo "Taille du fichier : " . file_put_contents("sqldump-".$base."-".date("Ymd-His").".sql", mysql_structure());
?>
 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page