CFScript和ColdFusion可选参数

CFScript和ColdFusion可选参数,coldfusion,cfml,Coldfusion,Cfml,我希望仅使用CFScript为ColdFusion组件提供可选参数,同时保持ColdFusion QueryParam SQL的使用 示例A:从基本用户检索信息。cfm适用于所有用户: <cfset get = application.controller.getuser()> 像这样的事情应该让你开始 sqlString = "select * from users where 1 = 1 "; if ( len(trim((arguments.userUID)) > 0

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

示例A:从基本用户检索信息。cfm适用于所有用户:

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

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

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

get.setSQL(sqlString);

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

这样的事情应该会让您开始

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

get.setSQL(sqlString);

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

使用条件逻辑构建一个sql变量。然后在get.setSQL方法中使用该变量。到底是什么“问题”?您是在问如何构建sql字符串吗?如果是,则有条件地构建它,就像处理参数一样。然后将最后一个字符串传递到
setSQL(…)
中。否则,你能澄清你的问题吗?确保包含任何错误消息。此外,在
addParam()
调用中不需要使用
符号。您可以删除引号和
#
,只需使用:
value=arguments.password
。最后,您是否以纯文本形式存储密码(看起来您可能是),如果是,请停止这样做。在存储它们之前,你需要对它们进行散列。你的整个方法(充其量)是次优的,如果不是完全错误的话。函数应该执行单个任务-您似乎将三个不同的任务合并在一起。
controller.authenticateUser(用户名、密码)
controller.getAllUsers(/*可选筛选器*/)
controller.getUser(useruid)
使用条件逻辑用sql构建变量。然后在get.setSQL方法中使用该变量。到底是什么“问题”?您是在问如何构建sql字符串吗?如果是,则有条件地构建它,就像处理参数一样。然后将最后一个字符串传递到
setSQL(…)
中。否则,你能澄清你的问题吗?确保包含任何错误消息。此外,在
addParam()
调用中不需要使用
符号。您可以删除引号和
#
,只需使用:
value=arguments.password
。最后,您是否以纯文本形式存储密码(看起来您可能是),如果是,请停止这样做。在存储它们之前,你需要对它们进行散列。你的整个方法(充其量)是次优的,如果不是完全错误的话。函数应该执行单个任务-您似乎将三个不同的任务合并在一起。
controller.authenticateUser(用户名、密码)
controller.getAllUsers(/*可选筛选器*/)
controller.getUser(useruid)
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();
}
sqlString = "select * from users where 1 = 1 ";
if ( len(trim((arguments.userUID)) > 0 )
sqlString &= " AND     userUID = :userUID";
etc

get.setSQL(sqlString);