Coldfusion / Lucee - 使用一个查询循环遍历3D数组以使用多个插入插入到数据库中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Coldfusion / Lucee - 使用一个查询循环遍历3D数组以使用多个插入插入到数据库中相关的知识,希望对你有一定的参考价值。
我知道标题是满口的 - 抱歉,但试图在这里具体。
DB:mysql(技术上是Maria) ColdFusion(技术上是Lucee:5.x)
注意:最外面的数组只显示2的一部分,并可以持续到30年代。
我正在寻找在数组上执行循环,以使用一个查询将图像中标记为“string”的元素插入到数据库中。为了清晰和简洁起见,已对查询进行了修整:
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。
我建议不要在INSERT语句上循环,而只是循环VALUES以生成单个INSERT语句。单个INSERT的执行速度要快得多,而且它会最小化与数据库的连接。
使用以下内容构建值列表:
for (var outer in arguments.inArray) {
for (var inner in outer) {
// Concat elements of inner array to a SQL VALUE string. If UUID is supposed to be a unique identity for the row, use Maria's uuid() instead of CF (or skip the UUID insert and let Maria do it).
// inArray elements and inUserID should be sanitized.
local.values &= "( uuid(), '" & inner[1] & "','" & inner[2] & "','" & inner[3] & "'," & local.userID & ")," ;
}
}
local.values = left(local.values,len(local.values)-1) ; // Get rid of the last comma.
local.sql = "INSERT INTO table (uuid, typeID, menuId, activityID, userID) VALUES " & local.values ;
在构建SQL INSERT字符串之后,执行查询以INSERT记录。 (您可能会以不同方式构建上述函数来处理构建查询字符串和参数,然后在一个位置执行它。)
不要忘记清理阵列和其他输入。阵列是来自您控制的源还是用户输入?
https://trycf.com/gist/7ad6af1e84906b601834b0cc5ff5a392/lucee5?theme=monokai http://dbfiddle.uk/?rdbms=mariadb_10.2&fiddle=d11f45f30723ba910c58a1e3f7a7c30b
以上是关于Coldfusion / Lucee - 使用一个查询循环遍历3D数组以使用多个插入插入到数据库中的主要内容,如果未能解决你的问题,请参考以下文章
将 ColdFusion 连接到 Google Bigquery
如何注册 ColdFusion 回调并从 Java 类调用它?
cfscript中IF块内的coldfusion continue关键字/奇怪的行为