動的SOQLについて

詳しくはリンク先

developer.salesforce.com

 

概要:

動的SOQLはAPEXコードで実行時にSOQL文字列を作る。

使いどころ:

・エンドユーザの入力で検索

・いくつかの項目名のレコードの更新

使い方:

・Database.query()を使う

・sObject型で受ける

・sObject s = Database.query(Str_limit_1)

 ・複数のときはList<sObject>

考慮事項

・バインド変数を使用できる

String myTestString = 'TestName';

List<sObject> sObjList = Database.query('SELECT Id FROM MyCustomObject__c WHERE Name = : myTestString');

 ・バインド変数項目はクエリ文字列に使えない。

  ・つまり、これはダメ

MyCustomObject__c myVariable = new MyCustomObject__c(field__c = 'TestField');

 ・なので次のように書く

String resolveField1 = myVariable.field1__c;

SOQLインジェクション

・escapeStringQuotesのメソッドを使ってインジェクションを防ぐ

 ・このメソッドで、ユーザが渡す文字列の単一引用符*1エスケープ文字(\)を追加する。

 ・これにより、単一引用符をデータベースコマンドではなく、囲まれた文字列として処理する。