動的SOQLについて
詳しくはリンク先
概要:
動的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にエスケープ文字(\)を追加する。
・これにより、単一引用符をデータベースコマンドではなく、囲まれた文字列として処理する。