Eri*_*air 7 t-sql coldfusion cfquery cfqueryparam
我主要CFQUERYPARAM用来防止SQL注入.由于查询查询(QoQ)不接触数据库,是否有任何逻辑上的理由在其中使用CFQUERYPARAM?我知道这不匹配的值cfsqltype,并maxlength会抛出异常,但是,这些值应该已经在此之前进行验证,并显示(从UX观点)友好的信息.
由于查询查询(QoQ)不接触数据库,是否有任何逻辑上的理由在其中使用CFQUERYPARAM?实际上,它确实触及了数据库,即您当前存储在内存中的数据库.理论上,该数据库中的数据仍然可以通过用户的某种注入进行篡改.这会影响您的物理数据库吗 - 没有.这是否会影响应用程序中数据的使用 - 是的.
你没有提供任何具体细节,但我会谨慎行事.如果您用于构建查询的任何数据来自客户端,则cfqueryparam在其中使用.如果您可以保证查询中没有任何元素来自客户端,那么我认为不使用它是可以的cfqueryparam.
另外,使用cfqueryparam也有助于优化数据库的查询,虽然我不确定查询查询是否属实.它也像撇号一样逃脱了你的角色.
在我看来,这是一种更简单的情况.
<cfquery name="NoVisit" dbtype="query">
select chart_no, patient_name, treatment_date, pr, BillingCompareField
from BillingData
where BillingCompareField not in 
(<cfqueryparam cfsqltype="cf_sql_varchar" 
value="#ValueList(FinalData.FinalCompareField)#" list="yes">)
</cfquery>
另一种方法是使用QuotedValueList.但是,如果该值列表中的任何内容包含撇号,则cfqueryparam将对其进行转义.否则我必须这样做.
编辑从这里开始
这是另一个不使用查询参数导致错误的示例.
QueryAddRow(x,2);
QuerySetCell(x,"dt",CreateDate(2001,1,1),1);
QuerySetCell(x,"dt",CreateDate(2001,1,11),2);
</cfscript>
<cfquery name="y" dbtype="query">
select * from x
<!--- 
where dt in (<cfqueryparam cfsqltype="cf_sql_date" value="#ValueList(x.dt)#" list="yes">) 
--->
where dt in (#ValueList(x.dt)#)
</cfquery>
写入的代码抛出此错误:
Query Of Queries runtime error.  
Comparison exception while executing IN.
Unsupported Type Comparison Exception: 
The IN operator does not support comparison between the following types: 
Left hand side expression type = "DATE".
Right hand side expression type = "LONG".
使用上面注释掉的查询参数,代码可以成功执行.
| 归档时间: | 
 | 
| 查看次数: | 776 次 | 
| 最近记录: |