gpt4 book ai didi

mysql - 我在 coldfusion 中的搜索表单的 SQL 搜索查询

转载 作者:行者123 更新时间:2023-12-01 00:39:34 25 4
gpt4 key购买 nike

我已经为我的申请创建了一个搜索表单。我现在想通过一次从 productID、ProductName、ProductCostFrom、ProductCostTO 获取 1 个或多个输入来在数据库中进行搜索。我正在使用以下查询进行搜索。如果我在输入中给出成本范围,它运行良好,但如果我只搜索“ProID”或“ProName”或两者,则会出现语法错误。

<cfquery name="myquery" datasource="cfdb2">
Select *
from ProEntry
where (
Procost BETWEEN #Form.Procost# AND #Form.ProCostTo#
)
OR (
Proid='#form.Proid#' OR
Proname='#form.Proname#'
)
</cfquery>

最佳答案

请记住,无论您向数据库发送什么查询,都必须是有效 SQL。当成本值缺失(或包含非数字值)时,生成的 SQL 将格式错误。如果两个字段都为空,则 where 子句将如下所示(错误):

where  ( Procost BETWEEN AND )

.. 而不是这个:

where  ( Procost BETWEEN 50 AND 100 )

如果搜索值是可选的,则需要有条件地构建 SQL 语句。一种常见的方法是从永远不会为真的静态条件开始,因此查询仅在其他过滤器匹配时才返回记录:

WHERE 1 = 0

然后仅当填充了必要的表单字段时才附加过滤器。尽管始终使用 cfqueryparam 来防止 sql 注入(inject)。

<cfif isNumeric(form.Procost) AND isNumeric(form.ProCostTo)>
OR (
Procost BETWEEN
<cfqueryparam value="#form.Procost#" cfsqltype="{replace_with_your_type}">
AND
<cfqueryparam value="#form.ProCostTo#" cfsqltype="{replace_with_your_type}">
)
</cfif>

<cfif len(trim(form.proID))>
OR Proid= <cfqueryparam value="#form.proID#" cfsqltype="{replace_with_your_type}">
</cfif>

... etcetera ...

关于mysql - 我在 coldfusion 中的搜索表单的 SQL 搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36614846/

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