MySQL-Klasse (Dump-Methode)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • MySQL-Klasse (Dump-Methode)

    Hi
    Ich habe heute eine MySQL-Klasse geschrieben.
    Ist erstmal nichts besonderes, aber diese Klasse kann MySQL-Dumps erstellen.
    Das funktioniert aber nicht auf jedem Server.
    Hab es auf 1blu, funpic, gimyweb, ... getestet
    Es hat komischerweiße nur bei funpic nicht funktioniert.

    Kann mir wer von euch sagen warum?

    Quellcode

    1. <?php
    2. /*******************************/
    3. /* Coded by Ludwig Kriechbaum */
    4. /* Copyright 2008 */
    5. /* venum-lk@gmx.de */
    6. /*******************************/
    7. // MySQL - Zugangsdaten
    8. define('MYSQL_HOST', 'localhost'); // MySQL-Host
    9. define('MYSQL_USER', 'user'); // Datenbankbenutzer
    10. define('MYSQL_PASS', 'password'); // Passwort
    11. define('MYSQL_DATABASE', 'database'); // Datenbank
    12. // mysqlv - Einstellungen
    13. define('DUMP_FOLDER', 'dump/'); // Speicherverzeichnis des Dumps (am Ende muss ein / stehen!)
    14. define('DUMP_SKIN', '1'); // Art des Dumps (0=Nur Inhalt; 1=Inhalt + Struktur; 2=Nur Struktur)
    15. class mysqlv {
    16. ...
    17. var $_dump = "";
    18. var $_tables = array();
    19. ...
    20. function getDump() {
    21. $this->_dump .= "-- mysqlv SQL Dump\n-- http://www.venum-lk.de\n-- v0.1\n-- \n-- Host: ".MYSQL_HOST."\n-- Erstellungszeit: ".date("d.m.Y")." um ".date("H:i")."\n-- \n-- Datenbank: `".MYSQL_DATABASE."`\n-- \n\n-- --------------------------------------------------------\n\n";
    22. // Tabellen der DB auflisten
    23. $sql = mysql_query("SHOW TABLES FROM ".MYSQL_DATABASE.";");
    24. while($result = mysql_fetch_assoc($sql)) {
    25. $this->_tables[] = $result['Tables_in_'.MYSQL_DATABASE];
    26. }
    27. $count = count($this->_tables);
    28. // Mit for() jede Tabelle ansteuern
    29. for($i=0;$i<$count;$i++) {
    30. // Struktur der Tabellen (DUMP_SKIN = 1 || 2)
    31. if(DUMP_SKIN) {
    32. $this->_dump .= "-- \n-- Tabellenstruktur der Tabelle `".$this->_tables[$i]."`\n-- \n\nCREATE TABLE ".$this->_tables[$i]." (\n";
    33. $sql = mysql_query("DESCRIBE ".$this->_tables[$i].";");
    34. // Spalteneigenschaften abholen
    35. $PRIMARY = "";
    36. while($res = mysql_fetch_assoc($sql)) {
    37. if($res['Null'] == "YES") {
    38. $NULL = "NULL";
    39. }else{
    40. $NULL = "NOT NULL";
    41. }
    42. if($res['Extra'] == "") {
    43. $EXTRA = "";
    44. }else{
    45. $EXTRA = " ";
    46. }
    47. if($res['Key'] == "PRI") $PRIMARY = $res['Field'];
    48. $this->_dump .= " ".$res['Field']." ".$res['Type']." ".$NULL.$EXTRA.$res['Extra'].",\n";
    49. }
    50. $this->_dump .= " PRIMARY KEY (`".$PRIMARY."`)\n);\n\n";
    51. }
    52. // Inhalt der Tabellen (DUMP_SKIN = 0 || 1)
    53. if(!DUMP_SKIN OR DUMP_SKIN == 1) {
    54. $this->_dump .= "-- \n-- Inhalt der Tabelle `".$this->_tables[$i]."`\n-- \n\n";
    55. $sql = mysql_query("SELECT * FROM ".$this->_tables[$i].";");
    56. while($res = mysql_fetch_row($sql)) {
    57. $data = array();
    58. for($j=0;$j<mysql_num_fields($sql);$j++){
    59. $data[] = mysql_real_escape_string($res[$j]);
    60. }
    61. $this->_dump .= "INSERT INTO ".$this->_tables[$i]." VALUES ('".implode("','",$data)."');\n";
    62. }
    63. $this->_dump .= "\n";
    64. }
    65. if($i!=($count-1)) $this->_dump .= "-- --------------------------------------------------------\n\n";
    66. }
    67. $handle = fopen(DUMP_FOLDER.MYSQL_DATABASE."_dump_".time().".sql", "w");
    68. fwrite($handle, $this->_dump);
    69. fclose($handle);
    70. }
    71. ...
    72. }
    73. ?>
    Alles anzeigen


    Die betreffende Methode ist getDump.

    Danke
    lu
  • Also ich würde sagen es funktioniert nicht, weil das $_tables Array leer ist.
    Und weil $_tables nicht statisch ist, hat es auch keine Auswirkungen wenn du es über andere Methoden befüllst. Da du ja auf getDump nur mit statischem Context zugreifst.

    Entweder du machst das GANZE also statisch (this-> durch self:: ersetzen und bei Membern und Funktionen das Schlüsselwort static einfügen) oder du machst es dynamisch und initialisierst es mit einem Konstruktor.
  • Ein MySQL Dump ist eine .sql Datei, in der Datenbankinformationen enthalten sind.
    Normalerweiße erstellt man einen Dump über PHPMyAdmin.
    Inhalt des Dumps:
    -> Struktur der Datenbank (Tabellennamen, -art, ...)
    -> Inhalt der Tabellen (GB-Einträge, News, ...)
    Wenn man den Dump dann wieder in eine andere Datenbank einspielt, hat man dort das exakte Abbild des Orginals.
    Dumps sind deswegen vor allem bei Page-Umzügen oder BackUps sehr nützlich.

    Ich hoff des stimmt soweit alles :)