【问题标题】:SOQL query, formulate query for more than oneSOQL查询,制定多条查询
【发布时间】:2012-07-20 02:08:50
【问题描述】:

我正在 php 中创建一个搜索框,以访问 SOQL 销售人员数据库中的数据。到目前为止,我有这个:

$query = "SELECT Id, FirstName, LastName, Phone From Contact WHERE FirstName = '$var'";

效果很好。但是,我该怎么做才能让我们说$var 可能是电话号码。因此,如果它与名字不匹配,请在电话号码等中搜索匹配项。

【问题讨论】:

    标签: php salesforce soql


    【解决方案1】:

    试试这个:

    $query = "SELECT Id, FirstName, LastName, Phone From Contact WHERE FirstName LIKE '%$var%' OR Phone LIKE '%$var%'";
    

    使用 LIKE 代替 = 可以匹配部分名称,例如搜索 dav 将导致返回 David 和 Daves。 % 是通配符占位符。

    【讨论】:

    • 我也同意下面 Dreaded 的帖子,你要清理 $var 以防止 SQL 注入。如果这是在封闭的 Intranet 上,那么您可能不必担心,但这是一种很好的做法。
    • 不错!谢谢。我对 %$var% 有一个问题,即使它是空的,我也会得到所有结果。有没有办法告诉它 var 至少不能为空?编辑:实际上我遇到了另一个问题。当我使用或我没有得到任何结果时:S
    • 您可能需要对此进行 javascript 验证,这样如果用户没有输入任何内容,他们就会在实际将数据发送到服务器之前收到警报。看看这个:w3schools.com/js/js_form_validation.asp
    • 哦,没关系,我修好了。原来 mysql 转义字符串不起作用。
    • 在调用mysql转义字符串之前需要连接db。这对于防止有人轻松侵入您的数据库很重要
    【解决方案2】:

    这应该检查名字是否匹配或名字不匹配但在电话中找到匹配项

     $var=mysql_real_escape_string($var); //protect your sql entries from sql injection, make sure to validate
     $query = "SELECT Id, FirstName, LastName, Phone From Contact WHERE FirstName = '$var' OR (FirstName !='$var' AND Phone='$var') ";
    

    或者如果你不介意这里或那里是否有匹配,你可以使用or。这比之前的查询在性能方面更好

     $query = "SELECT Id, FirstName, LastName, Phone From Contact WHERE FirstName = '$var' OR Phone='$var' ";
    

    【讨论】:

    • 感谢您的回答。无论出于什么奇怪的原因或不适合我。如果我只有一个搜索元素,那么它可以工作,但如果我使用两个它就行不通。我还确保我正在搜索的字段存在。
    • 您能否发布一个 $var 的示例,即使它确实存在于 db 中也不起作用? = 将完全匹配,Like '%%' 将使用通配符匹配。所以在上面的答案中,字符串需要完全匹配。如果它是 db 中的 abcd,则只有 abcd 匹配,而不是 abcd 与空格,也不是 abc。还要确保验证$var。如果它是空的,那么不要搜索它。例如 $var=trim($var);然后if (!empty($var))
    • 哦,我找到了原因。由于某些原因,使用 mysql 真正的转义字符串对查询不起作用!是因为我使用的是 SOQL 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多