Pregunta

He decidido crear una nueva tabla en mi base de datos que se utilizará para auditar todas las acciones realizadas en mi base de datos.

Mi mesa "actividad" es bastante simple y contiene las siguientes columnas:

  • Activity_ID: la clave principal
  • User_ID - Clave exterior del usuario
  • Acción - Tipo de consulta que se está realizando (seleccione, Actualizar, Eliminar)
  • Tabla - Nombre de la tabla afectada
  • Fila - Nombre de la (s) fila (s) afectada

Lo que estoy haciendo en este momento es que cuando se realiza una consulta, luego tengo otra consulta después de que inserta información en mi "actividad" mesa.

CÓDIGO:

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

Como puede ver, tengo que hacer esto manualmente para cada consulta y tengo más de 100 consultas en mi sistema y realmente no quiero tener que escribir una consulta individual para grabar lo que sucede.

Me preguntaba si hay alguna característica en MySQL que pueda decirme qué acciones se han realizado o hay alguna biblioteca o técnica en PHP que pueda ayudarme.

¿O estoy condenado a escribir 100 consultas individuales en mi sistema?

Gracias

¿Fue útil?

Solución

Crear en Insertar, On_update y On_Delete disparadores para su tabla que escriben detalles de todos los cambios en una tabla de actividades de auditoría

Otros consejos

¿Qué por crear desencadenantes?

Thia no es buena idea hacer auditoría en PHP.

¿Qué tal si haces un nuevo método para tu clase? $db->ql() (de query/log) que primero hace la consulta normal que toma la mysql_affected_rows() Y hace algo como

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

De esa manera, tendrá un historial completo de sus consultas, no solo el tipo de consulta y la mesa en la que se ejecutó.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top