gpt4 book ai didi

sql - 为什么 ColdFusion 哈希函数在这些场景中会返回不同的结果?

转载 作者:行者123 更新时间:2023-12-02 02:41:50 24 4
gpt4 key购买 nike

这是我第一次注意到 ColdFusion 的这种行为。我在更新查询以使用 <cfqueryparam> 时遇到了这个问题.该代码在 ColdFusion 8 平台上运行。我没有此版本之外的行为引用。

此外,我们通常会使用 <cfqueryparam>对于插入的值,这是促使调查此问题的原因。

对于这个例子,我们假设“first_string”和“second_string”包含一些文本,例如标题和一些带有来自 <textarea> 的换行符的段落文本。分别形成帖子。

我们还可以假设“md5_hashed_value”列的 SQL 数据类型是 char(32)。

场景 1:

<cfset hashed_value = hash(first_string & second_string, "MD5")>
<cfquery name="my_query" datasource="#my_datasource_name#">
INSERT INTO my_table
(
md5_hashed_value
)
VALUES
(
'#hashed_value#'
)
</cfquery>

在上面的第一个场景中,创建了一个散列值。

场景 2:

<cfquery name="my_query" datasource="#my_datasource_name#">
INSERT INTO my_table
(
md5_hashed_value
)
VALUES
(
'#hash(first_string & second_string, "MD5")#'
)
</cfquery>

在第二种情况下,计算出的散列值与第一种情况不同。

场景三

<cfquery name="my_query" datasource="#my_datasource_name#">
INSERT INTO my_table
(
md5_hashed_value
)
VALUES
(
<cfqueryparam value="#hash(first_string & second_string, "MD5")#" CFSQLType="CF_SQL_CHAR">
)
</cfquery>

在第三种情况下,插入数据库的值与第一种情况中插入的值相同。

为什么会这样? hash() 函数在所有情况下都以相同的方式被调用。它在代码中的位置是唯一的区别。当在 SQL 查询中直接调用 hash() 而不是通过 <cfqueryparam> 调用时,似乎发生了一些奇怪的事情。值或 <cfset> .

最佳答案

这是我半生不熟的猜测。

<cfquery></cfquery><cfsavecontent></cfsavecontent> 不完全相同.我不认为 &正在进行正常的字符串连接。所以这是对我的假设的检验。试试这些:

<cfset hashed_value = hash("" &first_string & second_string, "MD5")>
<cfquery name="my_query" datasource="#my_datasource_name#">
INSERT INTO my_table
(
md5_hashed_value
)
VALUES
(
'#hashed_value#'
)
</cfquery>

这和以前一样吗?我怀疑是这样。

<cfquery name="my_query" datasource="#my_datasource_name#">
INSERT INTO my_table
(
md5_hashed_value
)
VALUES
(
'#hash("" & first_string & second_string, "MD5")#'
)
</cfquery>

这和以前一样吗?我怀疑它没有。

解决方法

<cfquery name="my_query" datasource="#my_datasource_name#">
DECLARE @md5_hashed_value = '#hash(first_string & second_string, "MD5")#'

INSERT INTO my_table
(
md5_hashed_value
)
VALUES
(
@md5_hashed_value
)
</cfquery>

虽然这不具备 <cfqueryparam> 的所有优点,至少它参数化了你的查询

关于sql - 为什么 ColdFusion 哈希函数在这些场景中会返回不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59000217/

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