sql >> データベース >  >> RDS >> PostgreSQL

Ectoに生のSQLをログに記録させることはできますか?

    Ectoはプリペアドステートメントのみを使用します。 ectoクエリ構文を使用する場合、SQLインジェクションを導入することはできません。クエリ構文は、コンパイル時にSQLインジェクションが不可能であることを確認します。

    実行されたクエリを正確に表示することは、いくつかの理由で難しい場合があります。

    • Postgrex(したがってEcto)は(最も一般的ですが効率の低いテキストプロトコルの代わりに)postgresqlバイナリプロトコルを使用するため、PREPARE クエリが実際に文字列として存在することはありません。
    • ほとんどの場合、最初に表示されるのは1つのPREPARE 64237612638712636123(...) AS ...だけです。 その後、多くのEXECUTE 64237612638712636123(...) これはあまり役に立ちません。相互に関連付けようとするのは恐ろしいことです。

    私の経験から、この種のほとんどのソフトウェアは、システムの動作を理解するのにはるかに役立つため、生のクエリの代わりにプリペアドステートメントを使用してログに記録します。



    1. plsqlでファイルを書き込もうとしているときに無効なパス

    2. PHPでMySqlデータベースをバックアップする

    3. SQLServer2008およびHashBytes

    4. コレクションの操作