CFScript和ColdFusion可选参数

时间:2014-05-02 15:11:01

标签: coldfusion cfml

我想仅使用CFScript为ColdFusion组件提供可选参数,同时保持使用ColdFusion QueryParam SQL。

示例A:从所有用户的基本 user.cfm 中检索信息:

<cfset get = application.controller.getuser()>

示例B :可选地,使用相同的方法。从特定用户的基本 user-edit.cfm?edit = 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();
}

1 个答案:

答案 0 :(得分:7)

这样的事情应该让你开始。

sqlString = "select * from users where 1 = 1 ";
if ( len(trim((arguments.userUID)) > 0 )
sqlString &= " AND     userUID = :userUID";
etc

get.setSQL(sqlString);

请注意,如果没有提供参数,那么查询将返回整个表。您的原始代码也是如此。您可能想要考虑处理这种情况。