gpt4 book ai didi

mysql - cfc 中的查询在本地返回 [n] 项,但在实时站点上重复第一个元素 [n] 次

转载 作者:可可西里 更新时间:2023-11-01 07:32:05 25 4
gpt4 key购买 nike

我是 ColdBox(和一般的 mvc)的新手,一直试图自己解决这个问题,但无济于事。查找功能在我们的程序站点上运行良好,我试图通过一点一点地将它切换到 mvc 来弄湿我的脚。

在我的 mvc 测试站点上,我有一个查询,当在我的本地机器上执行时,它会正确返回预期的元素。但是当它在实时站点上运行时,无论返回数组中有多少元素,它都会重复第一个元素。

本地机器:ColdBox 4.3、Lucee 4.5.5、MySQL 5.6.37、PHPMyAdmin 4.4.15

上线:ColdBox 4.3、ACF 2016、MySQL 5.7、PHPMyAdmin 4.6.6

这是我的 CFC 中的函数:

function getMilestonesByDate(required string pickedMonth='', required string pickedDay='') {

transaction {
queryMilestonesByDate = queryExecute("
SELECT tbl_milestones.ID as milestoneID, tbl_milestones.event, tbl_milestones.date
FROM tbl_milestones
WHERE MONTH(tbl_milestones.date) = :pickedMonth AND DAY(tbl_milestones.date) = :pickedDay AND YEAR(tbl_milestones.date) != 1111
ORDER BY tbl_milestones.date ASC
", {
pickedMonth: {value: arguments.pickedMonth, cfsqltype: "cf_sql_varchar"},
pickedDay: {value: arguments.pickedDay, cfsqltype: "cf_sql_varchar"}
}
);
}

milestonesByDate = arrayNew(1);

for (row in queryMilestonesByDate) {
returnStruct = StructNew();
returnStruct["milestoneID"] = queryMilestonesByDate.milestoneID;
returnStruct["event"] = queryMilestonesByDate.event;
returnStruct["date"] = dateFormat(queryMilestonesByDate.date, "full");
arrayAppend(milestonesByDate, returnStruct);
}

return serializeJSON(milestonesByDate);
}

同样,这在本地运行良好。例如,它将在 12 月 26 日显示两个不同的里程碑——一个在 1986 年,一个在 1995 年。但是在实时站点上,它将显示 1986 年的里程碑两次。

但是,仅在实时站点上的 PHPMyAdmin 中运行 SQL 会按预期工作:

SELECT tbl_milestones.ID as milestoneID, tbl_milestones.event, tbl_milestones.date 
FROM tbl_milestones
WHERE MONTH(tbl_milestones.date) = '12' AND DAY(tbl_milestones.date) = '26' AND YEAR(tbl_milestones.date) != 1111
ORDER BY tbl_milestones.date ASC

所以查询似乎没问题。但是某处正在处理某些东西,我无法弄清楚。如果有帮助,这里是我的事件处理程序中对函数的调用:

function showMilestonesByDate( event, rc, prc ) {
prc.milestonesByDate = milestoneModel.getMilestonesByDate(pickedMonth,pickedDay);
event.renderData( type="json", data=prc.milestonesByDate );
}

所选月份和所选日期的值来自 jQuery UI 日期选择器。如果有人认为它会有所帮助,我可以发布该代码。但是,无论是否使用日期选择器,或者即使它是否出现在页面上,只要从测试页面上的硬编码值中转出查询结果都会显示相同的问题。

请注意,这在我们的程序网站上一切正常,但我很难将事情切换到 mvc,如果有任何关于我哪里出错的提示或建议,我将不胜感激!提前谢谢大家!

更新:这里是来自本地站点的 prc.milestonesByDate 转储:

[{"date":"1986 年 12 月 26 日星期五","event":"俄罗斯 Mil Mi-34 首飞","milestoneID":435},{"date":"12 月 26 日星期二, 1995","event":"印度海军 HAL Dhruv(PT4 原型(prototype)机)首飞","milestoneID":428}]

和现场直播一样:

[{"date":"1986 年 12 月 26 日星期五","milestoneID":435,"event":"俄罗斯 Mil Mi-34 首飞"},{"date":"12 月 26 日星期五, 1986","milestoneID":435,"event":"俄罗斯 Mil Mi-34 首飞"}]

最佳答案

这里发生的问题是 for ACFLucee 中查询的循环表现有点不同。

我不确定这是什么原因。但我观察到的是 for Lucee 中的循环类似于 <cfloop query=""> .但在 ACF 中并非如此。在 ACF 中,您需要使用变量 row在循环内而不是使用 queryMilestonesByDate .

for (row in queryMilestonesByDate) {
returnStruct = StructNew();
returnStruct["milestoneID"] = queryMilestonesByDate.milestoneID;
returnStruct["event"] = queryMilestonesByDate.event;
returnStruct["date"] = dateFormat(queryMilestonesByDate.date, "full");
arrayAppend(milestonesByDate, returnStruct);
}

因此,为了使循环在 ACF 和 Lucee 中都有效,您可以按以下方式更改它(我认为这是正确的方法,因为您使用的是 for (row in queryMilestonesByDate) )。

for (row in queryMilestonesByDate) {
returnStruct = StructNew();
returnStruct["milestoneID"] = row.milestoneID;
returnStruct["event"] = row.event;
returnStruct["date"] = dateFormat(row.date, "full");
arrayAppend(milestonesByDate, returnStruct);
}

有关其工作原理的示例。

ACF

Lucee

关于mysql - cfc 中的查询在本地返回 [n] 项,但在实时站点上重复第一个元素 [n] 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47983998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com