3

プロジェクトを CodeIgniter に移行していて、Active Record を利用したいと考えています。ただし、クエリに SQL コメントを追加する方法が見つかりませんでした。既存のコードでは、クエリは次のようになります。

UPDATE table
SET column = 'value'
WHERE  ID = passed value;
-- Transacted by ' .$_SESSION['Name']

私はGoogleとSOを検索しましたが、すべてを直接コーディングして使用せずに最後の「Transacted by」コメントを追加する方法に対する答えが見つかりませんでした$this->db->query('.....')

4

2 に答える 2

2

AR の機能は少し制限されているため、これが ActiveRecord 内で可能であるとは思えません。「where」句にカスタム文字列を使用し、カスタムの「where」文字列の最後にトランザクション コメントを貼り付けることが、有効なオプションの 1 つです。私はこれを自分でテストしていません。

手動でクエリを実行する必要がある場合でも、CI は独自のクエリを安全にするいくつかの優れたエスケープ関数 ($this->db->escape数字、$this->db->escape_str「where」文字列、および$this->db->escape_like_str「where like」文字列) を提供します - 私はより複雑な CI のほとんどで知っていますAR の制限により、クエリの約 1/5 に対してカスタム クエリを作成する必要があります。

于 2012-11-01T12:54:45.197 に答える
0

私を正しい軌道に乗せてくれたDarrrrrrenに称賛を送ります。

私はコントローラーで次のように変数を定義しました: $this->sqlStamp = ' /* Executed by ' .strtoupper( $this->router->class .'->' .$this->router->method) .' for ' .strtoupper( $this->session->userdata('displayName') ) .'*/ ';

更新と削除については、私は取り組むことができました ->where('1=1'.$this->sqlStamp, NULL, false)

Insertsにはwhereステートメントがなく、他の場所にコメントを挿入しようとしてもうまくいかなかったため、Insertsの解決策を得ることができませんでした。DBAに何かを探すために、挿入の前にこれを実行することになりました。 $this->db->get_where('Same_TableName','0=1'.$this->sqlStamp);

于 2013-01-08T17:05:02.113 に答える