Emerkove osobne stránky - Miroslav Rác

RSS
  11. august 2009

Export dát z MySQL do SQL súboru

Raz som potreboval generovať SQL z obsahu databázy, tak vznikla táto trieda so zákaldnými možnosťami.

Samotný kód:

  • class BackUpDB{
  •   var $DropTables = false;
  •   var $AddIfNotExists = false;
  •   var $AddAI = true;
  •   var $FileName = '';
  •   
  •   function __construct($host, $user, $pass, $database){
  •     $link = mysql_connect($host,$user,$pass) or die(mysql_error());
  •      mysql_select_db($database,$link) or die(mysql_error());
  •   }
  •   
  •   function GenerateSQL($Tables = ''){
  •     $SQL = '';
  •     if($Tables == ''){
  •       $ShowTables = mysql_query("SHOW TABLES");
  •       $Tables = array();
  •       while($r = mysql_fetch_array($ShowTables)){
  •         $Tables[] = $r[0];
  •       }
  •     }else{
  •       $Tables = is_array($Tables) ? $Tables : explode(',', $Tables);
  •     }
  •     foreach($Tables as $Table){
  •       $CreateTable = mysql_query("SHOW CREATE TABLE `$Table`");
  •       if($this->DropTables == true){
  •         $SQL .= 'DROP TABLE `'.$Table.'`;'."\n\n";
  •       }
  •       $SQL .= mysql_result($CreateTable, 0, 1).";\n\n";
  •       $Data = mysql_query("SELECT * FROM `$Table`");;
  •       $DescribeTable = mysql_query("DESCRIBE `$Table`");
  •       $Fields = array();
  •       while($r = mysql_fetch_array($DescribeTable)){
  •         $Fields[] = $r['Field'];
  •       }
  •       $DataNum = mysql_num_rows($Data);
  •       if($DataNum != 0){
  •         $SQL .= 'INSERT INTO `'.$Table.'` (';
  •         for($i=0;$i<count($Fields);$i++){
  •           $SQL .= '`'.$Fields[$i].'`'.($i == count($Fields)-1 ? '' : ', ');
  •         }
  •         $SQL .= ') VALUES '."\n";
  •         $Y = 0;
  •         while($r = mysql_fetch_array($Data)){
  •           $Y++;
  •           $SQL .= '(';
  •           $FieldsNum = count($r);
  •           for($i=0;$i<$FieldsNum/2;$i++){
  •             $SQL .= (is_numeric($r[$i]) || $r[$i] == 'NULL' ? $r[$i] : '\''.$r[$i].'\'').($i < ($FieldsNum/2)-1 ? ', ' : '');
  •           }
  •           $SQL .= ($Y == $DataNum ? ')' : '),'."\n");
  •         }
  •       }
  •       $SQL .= ";\n\n";
  •     }
  •     if($this->AddAI == false){
  •       $SQL = preg_replace("/AUTO_INCREMENT=([0-9]{1,})/", "", $SQL);
  •     }
  •     if($this->AddIfNotExists == true){
  •       $SQL = str_replace('CREATE TABLE', 'CREATE TABLE IF NOT EXISTS', $SQL);
  •     }
  •     if($this->FileName == ''){
  •       return $SQL;
  •     }else{
  •       if(!(substr($this->FileName, -4) == '.sql')){
  •         $this->FileName .= '.sql';
  •       }
  •       $handle = fopen($this->FileName,'w+');
  •       fwrite($handle,$SQL);
  •       fclose($handle);
  •       return $this->FileName.' úspešne vygenerovaný.';
  •     }
  •   }
  • }

Nasledujúci kód nám vygeneruje SQL obsahu databázy dbname.

  • $BackUp = new BackUpDB('localhost', 'root', '', 'dbname');
  • $BackUp->DropTables = true; //zmažeme tabuľky
  • $BackUp->AddIfNotExists = true; //pridáme IF NOT EXISTS
  • $BackUp->AddAI = true; //pridáme hodnotu nasledujúceho AI
  • $BackUp->FileName = 'zalohadatabazy'; //zadáme meno súboru
  • echo $BackUp->GenerateSQL();

Ak by sme chceli exportovať iba obsah tabuliek table1 a table2, tak funckii GenerateSQL() pridáme hodnotu "table1,table2" alebo pole s názvami tabuliek.


Článok napísal Miroslav Rác 11. augusta 2009
vybrali.sme.sk


Airweb.sk - creative web solutions
0 príspevkov

Diskusia

V diskusii pre tento článok ešte nie je žiadny príspevok.

Pridať komentár

Meno:
Predmet:
Text:Kontrola proti spamu
Menu Vyhľadávanie
  • Na stránke momentálne nie je možné vyhľadávať
Moje poznámky
  • 16. marca 2010 o 11:58:46:
    Na hodnotenie komentárov som použil správny výpočet podľa vzorcu uvedenom v dosť poučnom článku. Viac v rubrike Oplatí sa vidieť.
  • 1. januára 2010 o 13:29:02:
    Prajem vám šťastný a hlavne úspešný nový rok :)
  • 12. decembra 2009 o 23:51:55:
    Predmet v komentároch je už naozaj nepovinný :)
Používatelia
  • Je tu prítomných 1 používateľov.
emer, 2010

Na tomto blogu su vyjadrené moje myšlienky, názory a postoje k určitým veciam alebo udalostiam. Preto upozorňujem, že to čo tu napíšem nemusí byť 100% pravda a aj ja sa môžem zmýliť, alebo mať odlišný názor na vec. Texty neprešli jazykovou kontrolou.