gpt4 book ai didi

ColdFusion:二进制值的 cfqueryparam

转载 作者:行者123 更新时间:2023-12-04 05:00:16 25 4
gpt4 key购买 nike

我根据此链接中提供的帮助编写了以下查询,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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com