Hi!
Wo hab ich was von Tabelle geschrieben? Und nein, wenn du sowieso schon einen Wrapper hast ist das mitloggen einfacher (imho).
Ist nur die Frage was besser ist, wenn eh eine Verbindung zur DB besteht, warum das nicht in einer DB-Tabelle loggen? Da hätte ich dann den Vorteil, wieder mit nem Timestamp viel einfacher die neuen Abfragen zu bekommen! In der Logdatei ist das nicht ganz so einfach!
function querydb($sqlquery)
{
$ret = mysql_query($sqlquery);
if(!$ret) {
// Eine mehr oder minder melodramatische Fehlermeldung ausgeben und das Skript beenden
}
return $ret;
}
OK, das sieht vernünftig aus, hatte mir noch nie Gedanken drum gemacht aber das werde ich auch demnächst verwenden!
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);
}
}
Hatte ich oben schon gefragt, warum nicht in die DB mit einer Tabelle
ID | query | changed
---+-------+--------
| |
Da halt die Abfragen loggen und dann ggfs. nur abfragen
"SELECT query FROM log WHERE changed > $letztes_sync_datum ";
Aber das eigentliche Problem an dieser Lösung stellt die Nutzung der DB über andere Frontends dar. Zur Zeit werden Änderungen und neue Einträge nämlich teilweise von "Access" aus gemacht, und da ist sowas (auch möglich, aber) nicht ganz so leicht wie in PHP. Daher meine Überlegung, das ganze wie folgt zu machen:
Ich füge wie gesagt den Timestamp ein und logge lediglich das Synchronisationsdatum. So kann ich aus jeder Tabelle abfragen welche Datensätze nach diesem Zeitpunkt geändert wurden, und jedesmal zuerst die Felder einer Tabelle ermitteln, dann in einer Schleife mit den Feldnamen die Query zusammenbauen, je nachdem ob ID in Master existiert Update oder Insert.
Das Thema ist recht kompliziert, da sowohl Einträge in die Master als auch in die Client DB erfolgen können. Bei der Master(liegt im Internet) kommen aber nur Einträge über die Homepage(PHP, da wäre die obige Lösung mit loggen die Query das beste) , aber bei der Client können Datensätze auch über Access eingegeben und bearbeitet werden. Also brauche ich eine andere Lösung, sowas wie von mir beschrieben.
Ich hatte das aber schonmal hgroß und breit mit Sven Rautenberg diskutiertm und das war dann die Lösung am Ende, nur damals konnte ich das mit POST verschicken noch nicht. Jetzt will ich das makl richtig vernünftig machen, Problem ist das in master und Client gleichzeitig Einträge erfolgen können, das macht die Sache nochmal komplizierter. Ich löse das über verschiedene IDs in den gleichen Tabellen 2er Datenbanken, aber dadurch muß´ich die geloggte Query noch ändern.
Naja, ist wirklich Komplex die Sache, hab das auch nur geschrieben, damit Du verstehst das ich in die andere Richtung die Log-Funktion leider nicht verwenden kann, ist aber wirklich sehr viel einfacher!
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.
Wirst recht haben, nur ist die erste Variante sehr viel einfacher!
Viele Grüße
Andreas