coldfusion - 使用多个 cfqueryparam 时 cfquery 不返回结果

标签 coldfusion coldfusion-8 cfquery cfqueryparam

当使用多个 cfqueryparams 时,以下 cfquery 在 ColdFusion 中失败;但是,当它们未被使用或仅限于其中一个时,查询将返回预期结果:

<cfquery name="getComponent"
 datasource="#Request.DSN#"
 username="#Request.username#"
 password="#Request.password#">
  SELECT *
  FROM tbComponent
    INNER JOIN tbPart ON tbPart.partNo = tbComponent.partNo
    INNER JOIN tbProduct on tbProduct.prodNo = tbComponent.prodNo
  WHERE tbComponent.prodNo = <cfqueryparam value="#URL.prodNo#"
                              cfsqltype="CF_SQL_CHAR"
                              maxlength="3" />
    AND tbComponent.compNo = <cfqueryparam value="#URL.compNo#"
                              cfsqltype="CF_SQL_CHAR"
                              maxlength="2" />
</cfquery>

数据通过 URL 传入,如下所示:

http://localhost/index.cfm?prodNo=100&compNo=1

该查询已在 SQLPlus 中使用有效数据进行测试,并返回预期结果。这个问题似乎仅限于通过 URL 传递值时,尽管通过 post 和 FORM 传递它们可以正常工作,所以我怀疑某些东西在 URL 中被破坏了.数据和查询已使用 cfdump 检查,与用于在 SQLPlus 中运行查询的内容相比,一切看起来都是正确的。

数据库后端是 Oracle 11g,据我所知,所有相关驱动程序都是最新的。关于这里可能发生什么的任何想法,因为似乎已经检查了明显的问题。

最佳答案

我将放入 Oracle 的 LPAD 函数,这样当您只传入一两个加长字符时,它会在它们之前放置适当的间距,因为您的 URL 缺少 %20。像这样:

<cfquery name="getComponent"
 datasource="#Request.DSN#"
 username="#Request.username#"
 password="#Request.password#">
  SELECT *
  FROM tbComponent
    INNER JOIN tbPart ON tbPart.partNo = tbComponent.partNo
    INNER JOIN tbProduct on tbProduct.prodNo = tbComponent.prodNo
  WHERE tbComponent.prodNo = LPAD(<cfqueryparam value="#URL.prodNo#"
                              cfsqltype="CF_SQL_CHAR"
                              maxlength="3" />, 3)
    AND tbComponent.compNo = LPAD(<cfqueryparam value="#URL.compNo#"
                              cfsqltype="CF_SQL_CHAR"
                              maxlength="2" />, 2)
</cfquery>

这将在需要时填充内容,直到列的最大字符长度。您可以将它们更改为 2 和 1,假设至少有单个字符将始终为两者传递,因为我假设至少存在某个值的假设,因为没有 null 属性并检查它是否存在每个查询参数。

关于coldfusion - 使用多个 cfqueryparam 时 cfquery 不返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20319752/

相关文章:

jquery - jQuery 设置复选框在 IE6 中选中时出现问题(未显示为选中状态?)

security - Coldfusion 安全问题...如何隐藏文件目录?

variables - Coldfusion 8 -> 9 更新,功能不再工作

coldfusion - 是否可以在 ColdFusion 中动态生成查询名称?

oracle - cfquery Oracle 存储过程

mysql - Coldfusion MYSQL 日期查询参数不返回结果

mysql - 将 MS 访问迁移到 mysql——更改 CF 编码(来自新手)

datetime - ColdFusion中的日期显示问题

coldfusion - 为 ColdBox 应用程序创建数据源

coldfusion - 使用 ColdFusion 从字符串末尾删除设定数量的字符