首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ColdFusion:二进制值的cfqueryparam

ColdFusion:二进制值的cfqueryparam
EN

Stack Overflow用户
提问于 2013-04-26 18:16:11
回答 1查看 736关注 0票数 2

我根据此链接querying binary column using like in sql server中提供的帮助编写了以下查询

代码语言:javascript
复制
SELECT * FROM myTable
WHERE TestData >= 0x00010000 
  AND TestData < 0x00020000;

它返回了预期的结果。我使用了cfqueryparam并将查询更新为:

代码语言:javascript
复制
SELECT * FROM myTable
WHERE TestData >= <cfqueryparam value="0x00010000" cfsqltype="cf_sql_binary"> 
  AND TestData < <cfqueryparam value="0x00020000" cfsqltype="cf_sql_binary">;

但它返回了错误,错误消息:Invalid data 0x00010000 for CFSQLTYPE CF_SQL_BINARY.我尝试了cfsqltype="CF_SQL_BLOB",但没有结果。如何解决此问题?提前感谢

EN

回答 1

Stack Overflow用户

发布于 2013-04-27 06:06:29

按照现在的情况,保持查询为没有任何错误:

代码语言:javascript
复制
SELECT * FROM myTable
WHERE TestData >= 0x00010000 AND TestData < 0x00020000

(理想情况下,您应该列出单个列,而不是使用*。)

然而,虽然参数化这些查询没有安全上的好处(它们没有变量,因此不容易SQL注入),但为了缓存单个执行计划,使用参数化的SQL可能仍然有好处。

如果您有多个查询,格式为:

代码语言:javascript
复制
<cfquery...>
    SELECT * FROM myTable
    WHERE TestData >= 0x00010000 AND TestData < 0x00020000
</cfquery>

<cfquery...>
    SELECT * FROM myTable
    WHERE TestData >= 0x00020000 AND TestData < 0x00030000
</cfquery>

<cfquery...>
    SELECT * FROM myTable
    WHERE TestData >= 0x00030000 AND TestData < 0x00040000
</cfquery>

对这些使用cfqueryparam将允许为多个查询缓存单个执行计划,从而潜在地带来更好的性能。

在这种情况下,您需要使用BinaryDecode将十六进制字符串转换为cfqueryparam可以处理的二进制值,如下所示:

代码语言:javascript
复制
<cfquery...>
    SELECT * FROM myTable
    WHERE TestData >= <cfqueryparam value=#BinaryDecode('00010000','Hex')# cfsqltype="cf_sql_binary" />
    AND   TestData <  <cfqueryparam value=#BinaryDecode('00020000','Hex')# cfsqltype="cf_sql_binary" />
</cfquery>

(请注意,省略了0x前缀。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16234017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档