4

データベースで実行されたすべてのアクションの監査に使用される新しいテーブルをデータベースに作成することにしました。

私のテーブル「アクティビティ」はかなり単純で、次の列が含まれています。

  • activity_id-主キー
  • user_id-ユーザーの外部キー
  • アクション-実行されているクエリのタイプ(SELECT、UPDATE、DELETE)
  • table-影響を受けるテーブルの名前
  • 行-影響を受ける行の名前

現在私が行っているのは、クエリが実行されたときに、「アクティビティ」テーブルに情報を挿入する別のクエリが後にあります。

コード:

//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個の個別のクエリを書き出す運命にありますか?

ありがとう

4

3 に答える 3

2

監査アクティビティテーブルへのすべての変更の詳細を書き込むテーブルのONINSERT、ON_UPDATE、およびON_DELETEトリガーを作成します

于 2012-02-16T10:55:54.213 に答える
1

トリガーを作成するのはどうですか?

チアはPHPで監査を行うのは良い考えではありません。

于 2012-02-16T10:52:51.970 に答える
1

クラスに新しいメソッドを作成するのはどうですか。たとえば、$db->ql()(からquery/log)を最初に通常のクエリを作成するのではなく、を取得して次のmysql_affected_rows()ようなことを行います。

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

そうすれば、クエリの種類と実行されたテーブルだけでなく、クエリの完全な履歴を取得できます。

于 2012-02-16T11:02:27.877 に答える