Méthode pour enregistrer les activités sont effectuées sur la base de données? -MySQL / PHP

StackOverflow https://stackoverflow.com/questions/9309944

Question

J'ai décidé de créer une nouvelle table dans ma base de données qui sera utilisée pour la vérification de toutes les actions effectuées sur ma base de données.

Ma table "activité" est assez simple et contient les colonnes suivantes:

  • activity_id - la clé primaire
  • user_id - clé étrangère de l'utilisateur
  • Action - type de requête en cours d'exécution (SELECT, UPDATE, DELETE)
  • Tableau - nom de la table affectée
  • à une rangée - le nom de la ligne affectée (s)

Ce que je fais en ce moment est lorsqu'une requête est effectuée, je puis ai une autre requête après qui insère des informations dans mon « activité » table.

CODE:

//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')");

Comme vous pouvez le voir, je suis d'avoir à le faire manuellement pour chaque requête et j'ai plus de 100 requêtes dans mon système et je ne veux vraiment pas avoir à taper une requête individuelle pour enregistrer ce qui se passe.

Je me demandais est-il des fonctionnalités de MySQL qui peut me dire quelles actions ont été réalisées ou est-il des bibliothèques ou techniques en PHP qui peut me aider?

Ou suis-je condamné à écrire 100 requêtes individuelles dans mon système?

Merci

Était-ce utile?

La solution

Créer ON INSERT, ON_UPDATE et déclencheurs ON_DELETE pour votre table que les détails d'écriture de toutes les modifications apportées à une table d'activités d'audit

Autres conseils

Qu'en est-il de créer des déclencheurs?

Ce n'est pas une bonne idée de faire l'audit en PHP.

Que diriez-vous de faire une nouvelle méthode à votre classe, disons $db->ql() (de query/log) qui fait d'abord la requête normale, que prend la mysql_affected_rows() et il fait quelque chose comme

insert into logs set when = now(), query_string = "{$query}", affected_rows = "{$affected_rows}"

De cette façon, vous aurez un historique complet de vos requêtes, non seulement le type de requête et la table, il a été exécuté.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top