我想仅使用CFScript为ColdFusion组件提供可选参数,同时保持对ColdFusion QueryParam SQL的使用。CFScript和ColdFusion可选参数
例A:从基本user.cfm检索信息对所有用户:
<cfset get = application.controller.getuser()>
实施例B:任选地,使用相同的方法。 ?从基本用户edit.cfm检索信息编辑= 662B2709-0BA3-42DB-AD2CC29069F4A259为特定用户:
<cfset get = application.controller.getuser(userUID=url.edit)>
实施例C:可替换地,使用相同的方法,以找到特定的第一名称:
<cfset get = application.controller.getuser(firstname=form.firstname)>
CFC问题:下面是我controller.cfc。我想维护“AND userUID =:userUID”作为一个可选的CFQueryParam,只有当我的脚本请求时才会出现。
public function getuser(userUID='', password='', firstname=''){
var get = new query();
// query
get.setSQL("
SELECT *
FROM users
WHERE 1 = 1
AND userUID = :userUID
AND firstname = :firstname
AND passhash = :password
");
if (len(arguments.userUID) > 0)
get.addParam(name = "userUID", value = "#arguments.userUID#", cfsqltype = "cf_sql_varchar");
if(len(arguments.firstname) > 0)
get.addParam(name = "firstname", value = "#arguments.firstname#", cfsqltype = "cf_sql_varchar");
if (len(arguments.password) > 0)
get.addParam(name = "password", value = "#arguments.password#", cfsqltype = "cf_sql_varchar");
return get.execute();
}
使用条件逻辑与你的sql建立一个变量。然后在你的get.setSQL方法中使用该变量。 –
究竟是什么“问题”?你问如何构建SQL字符串?如果是,则有条件地进行构建,就像对待参数一样。然后将最后一个字符串传递给'setSQL(...)'。否则,你能否澄清你的问题?一定要包含任何错误消息。 – Leigh
在你的逻辑中,你可能希望使用'len(trim(arguments.userID))'(和其他变量)当前写入,一个空格(或多个空格)将超过逻辑。 –