ColdFusion queryExecute参数对象?

时间:2019-06-25 14:53:51

标签: coldfusion cfml coldfusion-11 cfquery cfqueryparam

我最近开始在项目中使用cfscript。在使用cfscript时,我使用了queryExecute()函数来运行查询。在少数情况下,同一功能中有多个查询。这些查询共享一些相同的参数。我想知道是否可以有一种结构来容纳所有查询的所有参数。这是我尝试过的:

local.qryParams = structNew();
structAppend(qryParams, {rec_id = {cfsqltype="cf_sql_numeric", value="#arguments.rec_id#"}});
structAppend(qryParams, {position = "#application.position#"});
structAppend(qryParams, {user_id = "#client.userid#"});
structAppend(qryParams, {title = {cfsqltype="cf_sql_varchar", value="#arguments.title#", maxlength: 50}});
structAppend(qryParams, {description = {cfsqltype="cf_sql_varchar", value="#arguments.description#", maxlength: 1000}});

然后我有两个SQL变量:

local.insertSQL = "
    INSERT INTO notes(rec_id, title, description, user_id, last_update) 
    VALUES (:rec_id, :title, :description, :user_id, getDate())
";
local.updateSQL = "
    UPDATE profile
    SET last_update = getDate(),
        user_id = :user_id
    WHERE rec_id = :rec_id
        AND position = :position
";

然后最后我有两个执行函数:

queryExecute(insertSQL, qryParams , {datasource="#application.datasource#", result: "insertResult"});
queryExecute(updateSQL, qryParams , {datasource="#application.datasource#", result: "updateResult"});

两个函数均成功执行,并且记录已插入/更新。我的问题是:

  • 这是一种将所有查询参数存储在一个结构中的好方法吗?
  • 这样做有潜在的问题或安全性问题吗?
  • 有什么建议/评论吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

这是一个开放式问题,但这是

问题1:这是一种将所有查询参数存储在一个结构中的好方法吗?
A1:是,但是如果您愿意,您可能要考虑使用实体。

第二季度:这样做是否存在任何潜在的问题或安全性问题?
A2:我不知道

第三季度:有任何建议/评论吗?
A3:

  1. 如果您的数据源位于application.cfc中,则无需明确声明它。

  2. 您很难获得结果。考虑myResult=QueryExecute(...)

  3. 您可以一次性构建该结构。您不需要所有这些structAppend()structNew()的打字方式太多。考虑{}

  4. user_id = "#client.userid#"的键入太多了……仅user_id = client.userid就足够了。

  5. 您更改了建筑结构{cfsqltype="cf_sql_varchar", value="#arguments.title#", maxlength: 50}的样式。恕我直言,请使用:代替=

希望这很有帮助