【发布时间】:2014-11-02 20:44:46
【问题描述】:
由于不寻常的代码设置,我没有使用带有 cfparam 标记的 cfquery,而是构建了一个 sqlInsertCols 列表和一个 sqlInsertValues 列表,并在插入语句中使用它们。代码如下:
<cfscript>
var sqlInsertCols = "";
var sqlInsertValues = "";
// some looping and other processing here to fill the lists
...
</cfscript>
<cfquery datasource="..." name="insert">
INSERT INTO MyTable(#sqlInsertACols#)
VALUES (#sqlInsertVals#)
</cfquery>
首先,考虑到这两个 sql 字符串都填充在此代码中,而不是基于任何用户输入,这是否存在任何安全问题?
这适用于我插入的几个字段,但我只是尝试添加一个日期字段并且无法让插入工作。日期格式为“mm/dd/yyyy”。将日期添加到 sql 列表的代码:
sqlInsertCols = ListAppend(sqlInsertCols, "MyDateField");
sqlInsertValues = ListAppend(sqlInsertValues, myDateVar);
这运行没有错误,但数据库中的值为1900-01-01 00:00:00.000。
我尝试在日期前后添加引号,但似乎无法正确插入。有没有办法做到这一点?
【问题讨论】:
-
试试
sqlInsertValues = ListAppend(sqlInsertValues, CreateODBCDateTime(myDateVar));。 -
@xpa1492 - 成功了!谢谢!如果您将其发布为答案,我会接受它
-
比@xpa1492 的建议更有效的是首先创建日期变量而不是然后转换的字符串变量。
-
不基于任何用户输入 究竟来源是什么?如果这些数据来自数据库中的另一个表,为什么不直接使用 INSERT INTO/SELECT 呢?否则,代码可能仍然存在 sql 注入的风险。另外,为什么不使用 cfquery 的 cfscript 版本呢?然后您可以使用 cfqueryparam 并获得绑定变量的性能优势。
-
@DanBracuk - 我们将日期作为字符串获取。它是从网页上抓取的。
标签: sql sql-server datetime coldfusion