Metodo per registrare quali attività vengono eseguite sulla base di dati? -MySQL / PHP
-
26-10-2019 - |
Domanda
Ho deciso di creare una nuova tabella nel mio database che verrà utilizzato per la verifica tutte le azioni eseguite sul mio database.
Il mio tavolo "attività" è abbastanza semplice e contiene le seguenti colonne:
- activity_id - la chiave primaria
- user_id - chiave esterna degli utenti
- azione - tipo di query in corso di esecuzione (SELECT, UPDATE, DELETE)
- Tavolo - nome della tabella interessata ??li>
- fila - nome della riga interessata (s)
Quello che sto facendo in questo momento è quando viene eseguita una query Poi ho un'altra domanda dopo che inserisce le informazioni in mio "attività" della tabella.
codice:
//query
$db->query("DELETE FROM foo WHERE id = '$foo->id'");
//activity record query
$db->query("INSERT INTO acitivity ( user_id, action, table, row ) VALUES ('$user->id', 'Deleted' , '$foo->id', 'foo')");
Come si può vedere che sto avendo a farlo manualmente per ogni query e ho più di 100 domande nel mio sistema e io davvero non voglio avere a digitare una query individuale per registrare ciò che accade.
Mi chiedevo c'è qualche funzionalità in MySQL che mi può dire che cosa sono state eseguite le azioni o c'è qualche librerie o tecniche in PHP che mi può aiutare?
O sono condannato a scrivere 100 singole query nel mio sistema?
Grazie
Soluzione
Crea sull'inserto, ON_UPDATE e trigger ON_DELETE per la vostra tavola che i dettagli di scrittura di tutte le modifiche a una tabella di attività di revisione
Altri suggerimenti
Che dire di creare trigger?
Questa non è una buona idea per fare il controllo in PHP.
Che ne dite di fare un nuovo metodo per la classe, dire $db->ql()
(da query/log
) che le prime marche la query normale, che prende il mysql_affected_rows()
e lo fa qualcosa di simile
insert into logs set when = now(), query_string = "{$query}", affected_rows = "{$affected_rows}"
In questo modo avrete una storia completa delle vostre domande, non solo il tipo di query e la tabella è stato eseguito su.