Apexで開発していると、データを検索するために SOQL(Salesforce Object Query Language) を使う場面はとても多いです。
その中でも、バインド変数 は、安全で柔軟なクエリを書くために重要です。
この記事では、SOQLのバインド変数について解説します。
そもそもバインド変数とは?
Apexの変数をSOQLクエリの中に安全に埋め込むための仕組みです。
例えば、次のように変数 lastName を使って Contact を検索したいとします。
String lastName = 'Iwasaki';
List<Contact> results = [SELECT Id, Name FROM Contact WHERE LastName = :lastName];
このように : を使ってApexの変数をSOQLに埋め込むことで、次のようなメリットがあります。
セキュリティ:SQLインジェクションを防止できる
可読性:文字列結合よりもシンプルで読みやすい
保守性:変数だけを差し替えればクエリの条件を動的に変更できる
また、複数の変数を使うことも可能です。
String lastName = 'Iwasaki';
String zip = '123-4567';
List<Contact> results = [
SELECT Id, Name
FROM Contact
WHERE LastName = :lastName AND MailingPostalCode = :zip
];
ApexのロジックとSOQLを自然に連携させるために、バインド変数は非常に重要な機能です。
Salesforce公式ドキュメントでも、バインド変数の使用について次のように記載されています:
Use bind variables instead of dynamic SOQL to avoid injection vulnerabilities.
(SQLインジェクションの脆弱性を避けるために、動的SOQLではなくバインド変数を使用してください)
また、別の開発者ガイドには以下のような記載もあります:
You can also bind expressions, such as date literals, arithmetic expressions, or method return values.
(日付リテラル、算術式、メソッドの戻り値などの式もバインドできます)