2010-04-22 42 views

回答

1

對不起,有點雜亂無章,但這些是我用來構建SQL代碼的表重建和重新填充的功能。這全都在「表格」對象內,但我相信你可以拼湊出發生的事情。

SQL「SHOW CREATE TABLE yourtablename」爲您提供了再次創建表所需的所有內容。剩下的只是循環遍歷所有條目並創建INSERT語句。

public function backup() { 
    $output = "/* - - - Table recovery for $this->tablename - - - */\n\n\n"; 
    $output .= "DROP TABLE IF EXISTS `$this->tablename`;\n\n"; 
    $output .= $this->showcreate().';'; 
    $output .= $this->showrepopulate(); 
    return $output."\n\n\n"; 
}   


final protected function showcreate() { 
    $result = $this->query("SHOW CREATE TABLE $this->tablename"); 
    return $result[0]['Create Table']; 
} 

final protected function showrepopulate() { 
    $result = $this->query("SELECT * FROM $this->tablename"); 
    $output = ''; 
    $count = count($result); 
    if ($count) { 
     $output = "\n\nINSERT INTO `$this->tablename` VALUES\n"; 
     for ($i=0; $i<$count; $i++) { 
      $output .= "("; 
      $numfields = count($result[$i]); 
      for ($j=0; $j<$numfields; $j++) { 
       if ($j>0) $output .= ','; 
       $output .= $this->Database->escape(array_shift($result[$i])); 
      } 
      $output .= ")"; 
      $output .= ($i != $count-1) ? ",\n" : ';'; 
     } 
    } 
    return $output; 
} 
+0

如果你正使用InnoDB,問題中的表中的外鍵用於我這樣做,你可能要禁用導入前檢查外鍵(否則會失敗)。但是:確保你在導入之前檢查你的外鍵,因爲即使你重新打開foreign_key_checks,MySQL也會樂於接受不一致的數據。好的一面:你可以使用http://forge.mysql.com上的存儲過程/tools/tool.php?id=11在導入後檢查您的數據。 – wimvds 2010-04-22 08:07:24

0

爲我做這個,如果你傾倒創建SQL代碼來重新創建意思表,我會建議使用現有的工具來管理MySQL,如phpMyAdmin或Adminer。

+0

我需要PHP來使用MySQL查詢 – 2010-04-22 07:00:37

相關問題