Метод для записи, какие действия выполняются в базе данных? -Mysql / Php
-
26-10-2019 - |
Вопрос
Я решил создать новую таблицу в моей базе данных, которая будет использоваться для аудита всех действий, выполненных в моей базе данных.
Мой стол "Мероприятия" довольно просто и содержит следующие столбцы:
- Activity_id - первичный ключ
- user_id - иностранный ключ пользователя
- Действие - тип выполняемого запроса (выберите, обновление, удаление)
- Таблица - Имя пораженной таблицы
- ряд - имя затронутой строки (ы)
Что я делаю в данный момент, так это когда проведен запрос, у меня есть еще один запрос, который вставляет информацию в мою "Мероприятия" стол.
КОД:
//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')");
Как вы можете видеть, мне приходится делать это вручную для каждого запроса, и в моей системе есть более 100 запросов, и я действительно не хочу печатать отдельный запрос, чтобы записать, что происходит.
Мне было интересно, есть ли какие -либо функции в MySQL, которые могут сказать мне, какие действия были выполнены или есть какие -либо библиотеки или методы в PHP, которые могут мне помочь?
Или я обречен написать 100 отдельных запросов в моей системе?
Спасибо
Решение
Создать на вставке, on_update и on_delete триггеры для вашей таблицы, которые записывают подробности всех изменений в таблице действий аудита
Другие советы
Как насчет создания триггеров?
THIA - это не хорошая идея, чтобы провести аудит в PHP.
Как насчет того, чтобы сделать новый метод для своего класса, скажем, $db->ql()
(из query/log
) это сначала делает обычный запрос, чем берет mysql_affected_rows()
И это делает что -то вроде
insert into logs set when = now(), query_string = "{$query}", affected_rows = "{$affected_rows}"
Таким образом, у вас будет полная история ваших запросов, не только тип запроса и таблицы, на котором он был запускается.