gpt4 book ai didi

javascript - 如何处理参数化查询中的空用户输入?

转载 作者:行者123 更新时间:2023-12-03 02:44:32 26 4
gpt4 key购买 nike

假设我的 Web 应用程序中有以下查询模板:

`WHERE UPPER(NAME) LIKE UPPER('%${NAME}%') AND UPPER(LASTNAME) LIKE UPPER('%${LASTNAME}%')`

现在,如果用户在应用程序中为其中一个字段输入空值,会影响查询结果吗?

这可以通过应用程序解决,方法是在执行期间使用 ifs 分解查询并构造查询,但对于某些查询,这会使应用程序代码变得过于复杂。

有没有办法在模板内部解决这个问题?仅使用 SQL 语言,不使用应用程序逻辑。

如果我不解决这个问题,如果我只是用空输入进行查询,会不会对我的性能影响太大? Oracle 是否具有不查询空输入的智能?

基本上:查询诸如 NAME LIKE '%%' 这样的内容有多糟糕? Oracle 会忽略这部分查询还是会影响性能(我希望它被忽略,因为这是用户未在表单中输入任何内容的结果)?这是一个简单的示例,但还有更复杂的嵌套查询示例。

这是一种懒惰的方式来处理用户不在申请表单中输入任何值的情况,假设他将表单中的name字段留空,在这种情况下我想要所有name 在查询中,无需构建新模板。

标记 Javascript,因为它是应用程序语言。

最佳答案

1) 永远不要直接用用户输入生成 SQL,否则你会被黑客攻击。搜索“SQL 注入(inject)”——仍然是各地黑客选择的方法。

2) 一旦你有了绑定(bind)变量以避免被黑客攻击,你的 SQL 语句就可以是:

where ( :first_name is null or name like :first_name )
and ( :last_name is null or name like :last_name )
and ...

其中绑定(bind)变量包含前导和尾随 % 符号(如果您选择这样做)。优化器自然会过滤掉那些为空的参数。

关于javascript - 如何处理参数化查询中的空用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48156219/

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