Henryk Plötz: HEADER manipulieren

Beitrag lesen

Moin

Jede Änderung - in einer extra Tabelle? Ist das nicht aufwendiger als einfach mit Timestamp und neu einer Tabelle wo bei jeder Synchronisation der Zeitpunkt festgehalten wird, udn alles was danach geändert wurde auswählen und daraus SQL-Statementsmachen.

Wo hab ich was von Tabelle geschrieben? Und nein, wenn du sowieso schon einen Wrapper hast ist das mitloggen einfacher (imho).

Was bitte ist ein Wrapper?

Na einfach eine Funktion um die eigentliche Funktion drumherum.

Ich hab beispielsweise häufig eine Funktion der Art

function querydb($sqlquery)
{
 $ret = mysql_query($sqlquery);
 if(!$ret) {
  // Eine mehr oder minder melodramatische Fehlermeldung ausgeben und das Skript beenden
 }
 return $ret;
}

Und rufe in meinem Skript sonst nirgendwo mehr mysql_query() direkt auf, sondern nur noch querydb(). Dann kann ich mir im Skript nämlich die Fehlerüberprüfungen sparen.

Und da jetzt noch ein
if(preg_match('!^(INSERT|UPDATE|DELETE)!i', trim($sqlquery))) {
 $fh = fopen("/eine/lustige/logdatei", "a");
 if(!$fh) die("Konnte logdatei nicht öffnen"); else {
  fwrite($fh, $sqlquery.";\n");
  fclose($fh);
 }
}

reinzufummeln ist vergleichsweise trivial im Gegensatz dazu eine SQL-Query auszubrüten die alle geänderten Datensätze sucht und sich dann auch noch zu überlegen, wie man daraus dann wieder eine Query baut.

mysql -uUSERNAME -p DATENBANKNAME < filename.sql

Wenn du so eine Datei gebaut hast, dann kannst du es mit diesem Kommando wieder einspielen. (Vorsicht: wenn du -p ohne Passwort dahinter angibst, wird er dich nach dem PW fragen)

Oder die Lösung daraus einen Array zu machen den ich dann Statement für Statement eintrage?

Genau, das mit dem Array würde ich dir empfehlen wenn du die Datensätze mit etwas in PHP selbstgeschriebenem wieder einspielen willst. Das sollte nicht sehr viel langsamer sein als der Aufruf des mysql-Client auf der Kommandozeile.

--
Henryk Plötz
Grüße aus Berlin