【发布时间】:2017-12-24 22:55:26
【问题描述】:
我知道标题是满嘴的 - 对此感到抱歉,但在这里想具体说明一下。
数据库:MySql(技术上是 Maria)
ColdFusion(技术上是 Lucee:5.x)
注意:最外面的数组只显示 2 的一部分,并且可以持续到 30 年代。
我希望对数组执行一个循环,以使用一个查询将图像中标记为“字符串”的元素插入到数据库中。为了清晰和简洁起见,查询已被修剪:
for (outer = 1; outer <= ArrayLen(myArray); outer++) {
local.currentrow = local.currentrow + 1;
for (inner = 1; inner <= ArrayLen(myArray[outer]); inner++) {
local.sql = "
INSERT INTO table (uuid, typeID, menuId, activityID, userID)
VALUES (
'#local.uuid#',
#myArray[outer][inner][1]#,
#myArray[outer][inner][2]#,
#myArray[outer][inner][3]#,
#arguments.formDataStruct.userID#
)";
queryExecute(local.sql);
}
}
我正在寻找沿着这条线的东西,但正如所写的那样,它不起作用:
local.sql = "
INSERT INTO table (uuid, typeID, menuId, activityID, userID)
VALUES (
if (local.currentrow gt 1) {
,
}
for (outer = 1; outer <= ArrayLen(myArray); outer++) {
local.currentrow = local.currentrow + 1;
for (inner = 1; inner <= ArrayLen(myArray[outer]); inner++) {
'#local.uuid#',
'#myArray[outer][inner][1]#',
'#myArray[outer][inner][2]#',
'#myArray[outer][inner][3]#',
'#arguments.formDataStruct.userID#'
}
})
";
queryExecute(local.sql);
我得到的错误信息是
位置
[1]的元素在数组中不存在
但如果我执行writedump[1][3][3](例如),我将得到值 24。
【问题讨论】:
-
什么不起作用?有例外吗? MySQL 通常会打印出类似
error in statement starting with...的内容。 -
哦,我漏掉了,不是吗。错误与 CF 相关,说明:
Element at position [1] doesn't exist in array。添加了要发布的错误消息。 -
您确定错误与该代码有关吗?
myArray在哪里定义?对我来说工作得很好,但注意到变量不像其他变量那样具有“本地”和“参数”的范围。此外,for(elem in array)循环比from-to循环更易读trycf.com/gist/1569556843207106fe09123cf5aac703/… -
myArray的范围在函数的顶部,尽管此处的原始帖子中没有显示。这是一个很好的收获。我会将该范围添加到我的数组中 - 也许这一直是问题所在。从另一个 SO 帖子中发现了从到循环的方法,所以我想我会尝试一下。仍在学习 cfscript 循环,所以我很欣赏其中的要点 - 看起来很有趣。 -
最终,查询应该使用查询参数来保护和性能。目前,如果您遇到 SQL 错误,请使用
writeDump(local.sql)进行故障排除。将生成的 sql 复制并粘贴到 MySQL 中并运行它。 MySQL 通常提供比 CF 更有意义的错误消息。
标签: coldfusion lucee