Executing a Dynamic Query at Runtime

DEX601 - Unit 2 Getting Started

📄 第 171 页 🎬 视频课程

课程章节介绍

今天我们来聊聊如何在Salesforce的Apex代码中执行动态SOQL查询,并且如何防止SQL注入攻击。 首先,我们来看一个例子,这个例子是一个名为`StudentBrowser`的类,里面有一个方法`getStudents`。这个方法的作用是根据传入的`CourseDeliveryID`或`InstructorID`来查询相关的学生信息。 在这个方法中,我们首先定义了一个基础的查询字符串`query`,它从`Contact`对象中选择了一些字段,比如`ID`、`Name`、`Email`等。然后,我们根据传入的参数`CourseDeliveryID`或`InstructorID`来动态地添加`WHERE`子句。如果`CourseDeliveryID`不为空,我们就添加一个条件,查询那些参加了特定课程交付的学生。如果`InstructorID`不为空,我们就查询那些由特定讲师授课的学生。 这里需要注意的是,我们在构建查询字符串时,使用了绑定变量(如`:CourseDeliveryID`和`:InstructorID`)来防止SQL注入攻击。绑定变量是Apex提供的一种安全机制,它可以确保用户输入的数据不会被解释为SQL代码的一部分,从而防止恶意用户通过输入特殊字符来篡改我们的查询。 此外,我们还使用了`String.escapeSingleQuotes()`函数来进一步确保安全。这个函数会将字符串中的单引号进行转义,防止它们被误解为SQL语句的一部分。 最后,我们使用`Database.query()`方法来执行这个动态构建的SOQL查询,并返回查询结果。 总结一下,动态SOQL查询非常灵活,但同时也需要注意安全性。通过使用绑定变量和`String.escapeSingleQuotes()`函数,我们可以有效地防止SQL注入攻击,确保我们的应用安全可靠。 希望这个解释对你有帮助!如果你有任何问题,随时问我。