为什么ColdFusion哈希函数在这些情况下返回不同的结果?

问题描述 投票:1回答:1

这是我第一次注意到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>

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

场景3

<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查询中而不是通过<cfqueryparam>值或<cfset>调用hash()时,似乎发生了一些奇怪的事情。

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

sql hash parameters coldfusion coldfusion-8
1个回答
0
投票

这是我半信半疑的猜测。

© www.soinside.com 2019 - 2024. All rights reserved.