如何在查询过滤器中转义单引号

时间:2014-03-05 00:04:56

标签: intuit-partner-platform

使用QBO V3 API,我正在尝试查询名称中包含撇号的客户,但我无法弄清楚如何正确引用该名称。

我使用了API Explorer,当我输入这样的查询时:

select * from customer where displayname like '%O\'Halloran'

然后API Explorer工作,并说request-uri确实是:

https://qb.sbfinance.intuit.com/v3/company/1002341430/query?query=select * from customer where displayname like '%25O%5C'Halloran'

在我的查询中注意几件事:

  1. 我必须在值
  2. 周围使用单引号
  3. 我必须自己逃避单引号。
  4. 然后在API中注意API Explorer给我回复:它保留单引号包装器字符串,但不会转义值内的单引号。

    如果我转身并使用API​​ Explorer正在使用的完全请求URI - 它不起作用。我得到一个查询过滤器异常。很明显,API Explorer向我展示的不是真正的查询。

    由于没有记录这一点,我只是试图对咒语进行反向工程,但我无法确定。我看过PHP SDK,但它没有在那里解决,他们认为呼叫者(像我们一样)会知道自己该做什么。

4 个答案:

答案 0 :(得分:3)

您需要使用\转义它,然后对您发送的实际URL请求进行URL编码。

您要点击的实际网址(对于LIKE '%Keith O'Malley%'的客户查询应该是这样的:

https://quickbooks.api.intuit.com/v3/company/730176505/query?query=SELECT+%2A+FROM+Customer+WHERE+FullyQualifiedName+LIKE+%27%25Keith+O%5C%27Mally%25%27+ 

完整的HTTP请求如下所示:

GET https://quickbooks.api.intuit.com/v3/company/730176505/query?query=SELECT+%2A+FROM+Customer+WHERE+FullyQualifiedName+LIKE+%27%25Keith+O%5C%27Mally%25%27+ HTTP/1.1
Content-Type: text/plain
Authorization: OAuth realm="", oauth_signature_method="HMAC-SHA1", oauth_signature="C9mzgdURjATMEymtAySNe%2BYBW7Q%3D",  oauth_nonce="3XDdP", oauth_timestamp="1394038522", oauth_token="lvprdgeo8rx8r1Ul10Bf474KjHEjcLFSVYttLJjcR2pFtIiD", oauth_consumer_key="qyprdlGJ4gWv4sMW0syilH2o4KirQe", oauth_version="1.0"

如果你没有承诺使用无法正常逃避的Intuit DevKit,那么有一个开源的QuickBooks PHP DevKit可以正确处理这些事情:

以下是您正在寻找的具体示例:

除了一堆其他工作示例:

答案 1 :(得分:1)

请使用转义字符(\)作为单引号(我认为您已经在PHP代码中执行此操作)。 PHP中应该有一些libs(或函数)执行此url编码。

您也可以参考此标准网址编码指南。 http://www.w3schools.com/tags/ref_urlencode.asp

Devkit处理大多数这些编码。 https://developer.intuit.com/docs/0025_quickbooksapi/0055_devkits

由于

答案 2 :(得分:0)

我只使用URL编码替换单引号char就成功了:%27

如下所示:query = SELECT%20Id%2CDisplayName%2CSyncToken%20FROM%20Customer%20WHERE%20Id%3E%270%27%20MAXRESULTS%201000

仅供参考,我也注意到API控制台和API资源管理器是宽容的(几乎是故障!)并且会接受比实际调用更广泛的语法变化。

答案 3 :(得分:0)

如果您使用PHP或Ruby API创建调用,那么您应该同时转义\ character和'您创建的字符串中的字符

例如使用Quickbooks Ruby API

find_by("CompanyName", "Bill\\\'s Windsurf Shop") 

生成正确的查询以搜索Bill's Windsurg Shop