11

PHPでINSERTおよびUPDATE MySQL SQLクエリを解析して、元のデータからどのような変更が加えられたかを判断しようとしています。これを作成するのは非常に簡単ですが、これを行うための既存のライブラリが PHP にあるかどうかを確認したいと思います。

基本的に私が持っているのは、データベースで実行された上記のすべてのクエリを含むテーブルです。テーブル名とクエリの種類は既に分離しています。このデータに基づいてユーザーが表示できる完全な変更ログを作成しようとしているので、元の INSERT の値を取得してから、各 UPDATE で行われた変更を取得する必要があります。最後に、フィールド名と新しい値、およびレコード ID が必要です。列名を人間が読める形式にすることや、フィールド値が実際に変更されていないかどうかなど、残りのチェック/美化を行います。

現時点では、おそらく複数のテーブルの UPDATE を行う必要はありませんが、役に立ちます。

これを行うためにどのようなライブラリがありますか?

4

6 に答える 6

5

http://pear.php.net/package/SQL_Parser

http://sourceforge.net/projects/txtsql

http://code.google.com/p/php-sql-parser

Perl の場合は、より多くの種類があります

于 2008-11-12T05:20:14.583 に答える
3

質問から少し外れていますが、考える価値のある提案かもしれません:

MySQL 5.0 以降、トリガーのサポートは非​​常に優れています。データベースに加えられた変更を記録しておきたい場合は、SQL ステートメントを保存する代わりに、挿入/更新トリガーを定義し、これらの値を保存できる別のテーブルを定義することもできます。たとえば、フィールドを持つ単純なテーブルを作成できます

timestamp, user, field, old_value, new_value

監視対象のテーブルの 1 つで DML が発生するたびに、それぞれの値を挿入します。これをさらに単純化するために、フィールドを追加できます

table

「追跡テーブル」に追加して、すべての監視対象テーブルへのすべての変更を 1 か所に保存します。

このトピックの詳細については、 MySQL のマニュアルを参照してください。

于 2009-01-05T21:59:33.553 に答える
2

チャンスを与えるかもしれません: SQL 解析とコンパイル

于 2009-04-09T15:58:54.577 に答える
1

Facebook は、 FQL パーサーのオープンソース PHP バージョンをリリースしました。私からすると、それは非常にきちんとしたコードでした。それをハックして、通常の SQL で動作させることができます。

于 2008-11-13T13:27:50.957 に答える
1

簡単に言えば、PEAR:SQL_Parser パッケージが最もクリーンな短期的なソリューションを提供し、PEAR:PHP_Parser_Generator パッケージ (FSQL が使用するジェネレーター) が非常に堅牢な長期的なソリューションのように見えることがわかりました。

少なくとも私の意見では、txtSQL は十分に堅牢ではなく、SQL を十分に解析して使用できないことがわかりました。

于 2009-01-05T17:40:19.987 に答える
1

あなたが試すことができます: phpで書かれたdqml2tree sql(dqlおよびdml)クエリパーサー

于 2009-01-25T00:09:08.647 に答える