挿入または更新時に完全なMySQLクエリ文字列を取得する 質問する

挿入または更新時に完全なMySQLクエリ文字列を取得する 質問する

MySQL は私の得意分野ではないので、助けが必要です。どんな助けでもありがたいです。

私のサイトでは、UPDATEまたは が欠損値で実行されたという問題が発生しています。これにより、サイト上の他の機能でいくつかの問題が発生しましたが、どのクラスでもまたは が実行された場所をINSERT見つけることができません。UPDATEINSERT

UPDATEこれらのテーブルに追加して、 または の元のクエリまたは完全なクエリを保存できるような、MySQL トリガーなどの方法はありますか。INSERTログ記録を試みましたが、データベース全体に適用され、ディスク領域を大量に消費してしまいます。

ご返信をいただければ幸いです。

PS: 現時点では、まだ開発段階にあるため、PHP クラスは少し乱雑です。そのため、更新または挿入関数に例外を追加すると時間がかかりすぎます。したがって、質問に対する回答に焦点を絞ってください。再度、ありがとうございます。

ベストアンサー1

次のステートメントを使用して、現在の SQL クエリを文字列として取得できます。

SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id = CONNECTION_ID()

TRIGGERそこで、テーブルへの挿入や更新操作時に実行されるを作成し、(私)現在のSQL文を取得し、(ii)次のように別のテーブルに挿入します。

DELIMITER |

CREATE TRIGGER log_queries_insert BEFORE INSERT ON `your_table`
FOR EACH ROW
BEGIN
    DECLARE original_query VARCHAR(1024);
    SET original_query = (SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id = CONNECTION_ID());
    INSERT INTO `app_sql_debug_log`(`query`) VALUES (original_query);
END;
|
DELIMITER ;

2つのトリガーを作成する必要があります。1つは更新用、もう1つは挿入用です。トリガーは新しいクエリを文字列として挿入します。app_sql_debug_logテーブル内のqueryカラム。

おすすめ記事