我最近开始在项目中使用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}});
然后,我有两个变量:
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"});
两个功能成功执行,并插入/更新记录。我的问题是:
- 这是将所有查询参数存储在一个结构中的好方法吗?
- 这样做的可能存在潜在的问题或安全问题吗?
- 任何建议/评论?
谢谢!
这是一个开放的问题,但是这里
Q1:这是将所有查询参数存储在一个结构中的好方法吗?
A1:是的,但是如果您喜欢这样,您可能需要考虑使用实体。
Q2:是否有任何潜在的问题或安全问题?
A2:我不知道
Q3:任何建议/注释?
A3:
-
如果您的数据源在
application.cfc
中,则无需阐明它。 -
您很难获得结果。考虑
myResult=QueryExecute(...)
-
您可以一镜头构建结构。您不需要所有这些
structAppend()
s。structNew()
的打字太多。考虑{}
。 -
user_id = "#client.userid#"
键入太多...只有user_id = client.userid
就足够了。 -
您更改了构建结构
{cfsqltype="cf_sql_varchar", value="#arguments.title#", maxlength: 50}
的样式。IMHO,使用:
代替=
希望这有用