データベースで実行されるアクティビティを記録する方法-mysql / php

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

質問

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

私のテーブル "アクティビティ" かなりシンプルで、次の列が含まれています。

  • Activity_id-プライマリキー
  • user_id-ユーザーの外部キー
  • アクション - 実行中のクエリの種類(Select、Update、Delete)
  • 表 - 影響を受けるテーブルの名前
  • 行 - 影響を受ける行の名前

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

コード:

//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トリガーに挿入、on_deleteトリガーを作成して、監査アクティビティテーブルのすべての変更の詳細を書きます

他のヒント

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

チアは、PHPで監査を行うことをお勧めします。

クラスに新しい方法を作るのはどうですか? $db->ql() (から query/log)それは最初に通常のクエリを作成します。 mysql_affected_rows() そして、それはようなことをします

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

そうすれば、クエリのタイプとそれが実行されたテーブルだけでなく、クエリの完全な履歴があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top