You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PHP调用Salesforce API用IN条件批量查询Account邮箱

问题:如何在Salesforce SOQL查询中使用IN条件替代OR批量查询邮箱对应的Account记录

我有一个PHP数组格式的邮箱列表,需要通过Curl调用Salesforce API,查询其中哪些邮箱已对应Salesforce的Account记录,并获取这些记录的Id存入本地系统。目前已实现用OR条件拼接邮箱的查询:

$query = "query/?q="; 
$sql = "SELECT+Id,+Email+FROM+Account+WHERE+Email='example1@gmail.com'+OR+Email='random@name.net'"; 
$url = $domain . $api . $query . $sql;

但邮箱列表过长,希望改用类似SQL的IN条件查询,比如:

"SELECT Id, Email FROM Account WHERE Email IN (" . $emails . ")"

尝试后报错:“bind variables only allowed in apex code - malformed query”,请问如何实现用IN条件替代OR的查询?

解决方案

  • 正确格式化IN条件的SOQL语法:SOQL的IN条件要求括号内的每个值必须用单引号包裹,且以英文逗号分隔。你需要先将PHP数组中的邮箱处理为符合该格式的字符串,同时转义邮箱内的单引号,避免语法错误或注入风险。

    示例PHP代码:

    // 假设$emailList是你的邮箱数组
    $emailList = ["example1@gmail.com", "random@name.net", "test@domain.com"];
    
    // 格式化邮箱:转义单引号+包裹单引号,再拼接成字符串
    $formattedEmails = implode(',', array_map(function($email) {
        return "'" . str_replace("'", "\\'", $email) . "'";
    }, $emailList));
    
    // 构造SOQL语句
    $sql = "SELECT Id, Email FROM Account WHERE Email IN (" . $formattedEmails . ")";
    // 对查询语句做URL编码,确保特殊字符被正确处理
    $encodedSql = urlencode($sql);
    
    $query = "query/?q=";
    $url = $domain . $api . $query . $encodedSql;
    
  • 注意IN条件的数量限制:Salesforce SOQL规定IN条件的取值不能超过1000个。如果你的邮箱列表超过该数量,需要拆分数组分批执行查询,最后合并结果集。

  • 优先使用URL编码:之前的OR查询用+代替空格不够严谨,建议对整个SOQL语句执行urlencode,避免特殊字符导致的查询语法错误。

内容的提问来源于stack exchange,提问作者Lou Nik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 08:55:23