Hallo,
ich stehe vor dem Problem alle möglichen Datenbankänderungen zu loggen,
dh. ich fange alle Datenbankquerys ab, und schicke sie durch den Logger.
Der Logger kennt alle zu protokollieren Tabellen, und deren Primärschlüssel.
Meine aktuelle Funktion sieht derzeit so aus:
das Problem dabei ist, wie zerlege ich eine SQL Anweisung der Form
PS: die wichtigen Tabellen, welche geloggt werden haben alle noch einen
2. unique Index, der für Replace genutzt werden kann. Die darin enthaltenen
Spalten sind dem Logger auch bekannt.
Irgendwelche Ideen?
ich stehe vor dem Problem alle möglichen Datenbankänderungen zu loggen,
dh. ich fange alle Datenbankquerys ab, und schicke sie durch den Logger.
Der Logger kennt alle zu protokollieren Tabellen, und deren Primärschlüssel.
Meine aktuelle Funktion sieht derzeit so aus:
PHP-Code:
function log( $_sql ){
// insert wird im nachheinein behandelt, um den neuen prkey zu erhalten
// ok, wir haben ein query, und muessen nun checken ob dies geloggt werden soll
$this->_getlogtables();
// erstmal die Tabelle aus der Query ermitteln
preg_match('#(REPLACE|UPDATE|DELETE)[^A-Z](FROM|INTO|IGNORE)+[^A-Z]([a-z_0-9]*)#si',$_sql,$answer);
$table = $answer[3];
$action = $answer[1];
// Tabelle zu loggen?
if( in_array($table,array_keys($this->tables)) ){
// dann versuchen wir mal einen Primaerschluessel zu finden
if(preg_match('#'.$this->tables[$table]['prkey'].'[^a-z]*=[^a-z]*([a-z0-9]*)#is',$_sql,$answer)){
$prkey = $answer[1];
}elseif( preg_match(... ??? ...) ){
// hier das Problem
}
}
return 1;
}
Code:
INSETR INTO blabla ( spalte1, spalte2, ... ) VALUES ( 'abc', 123, ...)
2. unique Index, der für Replace genutzt werden kann. Die darin enthaltenen
Spalten sind dem Logger auch bekannt.
Irgendwelche Ideen?
Kommentar