小编典典

如何在ORDER BY子句中使用cfqueryparam?

sql

我正在努力成为一名优秀的CF Web开发人员,并<cfqueryparam>在所有可用于我的SQL查询的FORM或URL元素周围使用。

在这种情况下,我试图允许用户动态控制ORDER BY子句。

<cfquery datasource="MyDSN" name="qIncidents">
  SELECT IncidentID, AnimalID, IntakeDate, DxDate, OutcomeDate
  FROM Incidents
  WHERE ShelterID = <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.ShelterID#">
  ORDER BY <cfqueryparam cfsqltype="cf_sql_varchar" value="#SortBy#">
</cfquery>

当我这样做时,出现以下错误:

由ORDER BY数字1标识的SELECT项包含一个变量,作为表示列位置的表达式的一部分。仅当通过引用列名的表达式进行排序时才允许使用变量。

关于如何安全地执行此操作的任何建议?


阅读 185

收藏
2021-04-22

共1个答案

小编典典

不幸的是,您不能在Order By子句中直接使用CFQUERYPARAM。

如果要动态使用Order
By,但仍可以安全使用,则可以设置CFSWITCH或类似结构来根据某些条件(例如URL变量)更改SortBy变量。与往常一样,不要直接从用户传递任何值,只需查看用户的输入,然后根据该输入从预定的可能值列表中进行选择。然后,只需使用标准语法:

ORDER BY #SortBy#
2021-04-22