WordPress (externe) Tabelle kopieren, Backup erstellen

7c098c9c60c04c4d814114c0d8559d79

Tabelle mit WordPress eigenen Funktionen kopieren, klonen, Backup erstellen

Folgendes: Innerhalb von WordPress habe ich ein PHP-Script geschrieben, das verschiedene Aktivitäten und Zustände protokolliert. Jetzt möchte ich automatisch – oder per Cronjob – von diesen Dateien regelmäßig ein Backup anlegen, die existierende Tabelle einlesen und mit einem Suffix (in Gestalt des akt. Datums) Klonen, duplizieren.

Mir schwebten dabei die WordPress Funktionen, Klasse wpdb() und dbDelta() vor. Da ich zwar etwas von PHP verstehe, aber kein fähiger „WordPress-Entwickler“ bin und auch nach 2 Tagen keine brauchbare Lösung für mein Anliegen in der Google-Suche fand, fragte ich einfach die KI von Google, den Google Bard.

Ich war erstaunt, ob der selbstbewußten und überzeugten Antwort dieser KI. Das Problem ist – diese neuen neuronal trainierten „KIs“ mögen einen Turing-Test bestehen, menschliche Leser, mit Fachwissen oder einer kommunikativen Leichtigkeit blenden – aber ob wird da Fachwissen wirklich perfekt auf die erkannte Aufgabenstellung gemünzt wird, bezweifele ich etwas.

Google Bards Anwort zu: „Tabelle mit WordPress duplizieren“

Der KI Google Bard wird nachgesagt, vollständigen und funktionierenden Programmcode auf Anfrage zu erstellen – das wollte ich ausprobieren. Die vollständige Frage an die KI lautete: „Wie kann ich bei WordPress mit dem wpdb Objekt eine Tabelle kopieren?“
Wie wir später sehen werden, ist die genaue Fragestellung eminent wichtig.

Antwort

Um eine Tabelle mit dem wpdb-Objekt in WordPress zu kopieren, kannst du die folgende Funktion verwenden:

function copy_table($source_table, $destination_table) {
  // Rufen Sie die Datenbankverbindung ab
  global $wpdb;

  // Überprüfen Sie, ob die Zieltabelle vorhanden ist
  if ($wpdb->get_var("SHOW TABLES LIKE '$destination_table'") !== $destination_table) {
    // Erstellen Sie die Zieltabelle
    $wpdb->query("CREATE TABLE $destination_table LIKE $source_table");
  }

  // Rufen Sie die Liste der Spalten in der Quelltabelle ab
  $columns = $wpdb->get_results("SHOW COLUMNS FROM $source_table");

  // Durchlaufen Sie die Spalten und kopieren Sie sie in die Zieltabelle
  foreach ($columns as $column) {
    $wpdb->query("ALTER TABLE $destination_table ADD `{$column->Field}` {$column->Type}");
  }

  // Holen Sie sich die Daten aus der Quelltabelle
  $data = $wpdb->get_results("SELECT * FROM $source_table");

  // Durchlaufen Sie die Daten und fügen Sie sie in die Zieltabelle ein
  foreach ($data as $row) {
    $wpdb->insert($destination_table, $row);
  }
}

Diese Funktion nimmt zwei Argumente entgegen: den Namen der Quelltabelle und den Namen der Zieltabelle.

Zuerst wird die Verbindung zur Datenbank abgefragt. Dann wird überprüft, ob die Zieltabelle bereits vorhanden ist. Wenn nicht, wird die Zieltabelle mit dem Befehl CREATE TABLE erstellt.

Als nächstes wird die Liste der Spalten in der Quelltabelle abgefragt. Diese Spalten werden dann mit dem Befehl ALTER TABLE in die Zieltabelle kopiert.

Schließlich wird die Daten aus der Quelltabelle abgefragt und in die Zieltabelle eingefügt.

Hier ist ein Beispiel, wie die Funktion verwendet werden kann:

copy_table("my_table", "my_new_table");

Dieser Code kopiert die Tabelle my_table in eine neue Tabelle namens my_new_table.

Die Funktion kann auch verwendet werden, um eine Tabelle in eine andere Datenbank zu kopieren. Dazu musst du nur die Verbindungsinformationen für die Zieldatenbank an die Funktion übergeben.

Hier ist ein Beispiel, wie die Funktion verwendet werden kann, um eine Tabelle in eine andere Datenbank zu kopieren:

function copy_table($source_table, $destination_table, $destination_db) {
  // Get the database connection.
  global $wpdb;

  // Check if the destination table exists.
  if ($wpdb->get_var("SHOW TABLES LIKE '$destination_table'") !== $destination_table) {
    // Create the destination table.
    $wpdb->query("CREATE TABLE $destination_table LIKE $source_table");
  }

  // Get the list of columns in the source table.
  $columns = $wpdb->get_results("SHOW COLUMNS FROM $source_table");

  // Iterate over the columns and copy them to the destination table.
  foreach ($columns as $column) {
    $wpdb->query("ALTER TABLE $destination_table ADD `{$column->Field}` {$column->Type}");
  }

  // Get the data from the source table.
  $data = $wpdb->get_results("SELECT * FROM $source_table");

  // Iterate over the data and insert it into the destination table.
  foreach ($data as $row) {
    $wpdb->insert($destination_table, $row);
  }

  // Set the connection to the destination database.
  $wpdb->set_db($destination_db);
}

Dieser Code kopiert die Tabelle my_table in die Tabelle my_new_table in der Datenbank my_db.

Funktioniert der von Google Bard erzeugte Code?

Nein. Leider funktioniert der von Google Bard erzeugte Code nicht. Eine neue Tabelle mit der Struktur der Original-Tabelle wird angelegt, doch keine Daten in die neue Tabelle kopiert. Der Fehler liegt in folgender Zeile:

$wpdb->insert($destination_table, $row2);

So einfach funktioniert der wpdb->insert() Befehl jedoch nicht, es fehlen einige Parameter und die Syntax ist völlig daneben. Richtig wäre gewesen:

$wpdb->insert( 
	'table', //Tabellenname 
	array( 
		'column1' => 'value1', //String-Wert 
		'column2' => 123   //Ganzzahliger Wert
	), 
	array( 
		'%s', //String-Wert (column1)
		'%d'  //Ganzzahliger Wert (column2)
	) 
);

Wie Du siehst, kann die Liste der Parameter ziemlich kompliziert sein, wenn eine Tabellenzeile aus 10 verschiedenen Feldern besteht. Das erste Array listet den Inhalt auf, das zweite Array enthält zu jeder Spalte des Format. Doch so kompliziert muss es nicht werden.

Wichtig war der genaue Wortlaut der KI-Anfrage, welcher zu dem vorgeschlagenen fehlerhaften P.HP-Code führte. Ich fütterte Google Bard mit dem Satz: „Wie kann ich bei WordPress mit dem wpdb Objekt eine Tabelle kopieren?“. Die Google-KI ging davon aus, dass es unbedingt mit der wpdb-Klasse erledigt werden soll und bastelte Code um den Begriff „wpdb“ herum. Aber auch eine Umstellung der Frage lieferte kein einfaches Ergebnis. Erst eine weitere Suche im Internet nach „MySQL Tabelle kopieren“ führte zum Erfolg.

Lösung: WordPress MySQL Tabelle mit nur zwei Befehlen kopieren!

Tatsächlich kann eine MySQL-Tabelle mit lediglich zwei PHP-Zeilen (5 & 6) kopiert werden.

function copy_table_datum($Tabelle_alt) {
  	global $wpdb;
  	$Tabelle_neu = $Tabelle_alt."_".date("Y_m_d_H_i");
  	// Tabellen-Struktur kopieren
	$wpdb->query("CREATE TABLE $Tabelle_neu LIKE $Tabelle_alt"); 
  	// Tabellen-Inhalt kopieren
	$wpdb->query("INSERT INTO  $Tabelle_neu SELECT * FROM $Tabelle_alt"); 
}