SOQLを動的に作りたい場面があったので、方法と注意点について記事化
動的にSOQLを作成して、レコードを取得したいときは、
クエリ文字列を作成してDatabase.query()
に渡してあげる
String soql = 'SELECT Id FROM Account WHERE NAME ='+ VALUE;
List<Account> accountList = Database.query(soql);
ここで注意
↑みたいに単純にクエリ文字列に変数を繋げるとSQOLインジェクションが起きるらしいので、
escapeSingleQuotes()
で変数を文字列として処理する
結論
↓みたいにする
String soql = 'SELECT Id FROM Account WHERE NAME = '+ String.escapeSingleQuotes(VALUE);
List<Account> accountList = Database.query(soql);
ポイント
- 動的SOQLはSOQLインジェクションに注意
-
scapeSingleQuotes()
使う
-
- 静的SOQLはバインド変数を使っているのでSOQLインジェクションを防げるらしい
参考