ColdFusion:二进制值的 cfqueryparam

标签 coldfusion binary coldfusion-8 cfml cfqueryparam

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

SELECT * FROM myTable
WHERE TestData >= 0x00010000 
  AND TestData < 0x00020000;

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

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"但没有结果。 如何解决这个问题?提前致谢

最佳答案

就目前情况而言,将查询保留为以下内容并没有本质上的错误:

SELECT * FROM myTable
WHERE TestData >= 0x00010000 AND TestData < 0x00020000

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

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

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

<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 可以处理的二进制值,如下所示:

<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 前缀被省略。)

关于ColdFusion:二进制值的 cfqueryparam,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16234017/

相关文章:

c# - Coldfusion 在实例化 .Net 引用时缺少错误信息

rest - 可以在 CF10 中使用 REST 代替 URL Rewrite 吗?

在 C 中压缩和加密字节数组

binary - BC中的按位运算?

pdf - 如何使用 cfpdfform 在 PDF 中嵌入图像

ColdFusion - 获取下一个要运行的计划任务

coldfusion - 能否在纯 ColdFusion 解决方案中实现干净的 URL?

assembly - 如何使用十六进制创建二进制可执行文件?

coldfusion - <cfloop condition ="true"> 导致了最奇怪的错误

java - 使用 notnoop 的 java-apns 库时导致此错误的原因是什么?