我的老板要我使用cfscript而不是标签进行数据库交互。有人知道任何好的教程吗?我购买了Adobe ColdFusion应用程序开发书,第2卷。但它在脚本编写方面没有太多内容。我做谷歌并找到this site,但没有解释太多。
有没有人知道有关在CFScript中访问数据库的任何好教程?
基本上我必须将以下内容转换为使用CFScript:
<cfquery name="drafts" datasource="ICEchat">
SELECT * from Messages where IsTemp=1 and LinkA=#FORM.LinkA# and LinkB=#FORM.LinkA#
</cfquery>
<cfif drafts.recordcount GT '0'>
<cfquery name="Attachments" datasource="ICEchat">
SELECT * FROM Attachments where id=2
</cfquery>
{ Message:"<cfoutput query="drafts">#Message#</cfoutput>", Attachments:[<cfoutput query="attachments">
"#url#"<cfif attachments.currentRow LT attachments.recordcount>,</cfif>
</cfoutput>]}
<cfelse>
<cfquery name="addrecord" datasource="ICEchat">
INSERT INTO Messages
VALUES(1,1,' ',1)
</cfquery>
{ Message:"NA", Attachments:[]}
</cfif>
答案 0 :(得分:10)
从谷歌上的4th link获取“cfscript查询教程”:
<CFSCRIPT>
myQry = new Query(); // new query object
myQry.setSQL("select bookid, title, genre from app.books where bookid = :bookid"); //set query
myQry.addParam(name="bookid",value="5",CFSQLTYPE="CF_SQL_INTEGER"); // add query param
qryRes = myQry.execute(); // execute query
writedump(qryRes.getResult().recordcount, true); // get resultcount
writedump(qryRes.getResult(), false); // dump result
writeoutput('<BR>');
</CFSCRIPT>
应该告诉你需要知道的一切。
此外,真的不应该手动创建JSON,无论它多么简单。使用serializeJson()
。
答案 1 :(得分:6)
没有测试过,但是应该这样做。
<cfscript>
local.drafts = new Query();
local.drafts.setDatasource("ICEchat");
local.drafts.addParam(name="linkA", value="#form.linkA#", cfsqltype="CF_SQL_VARCHAR");
local.drafts.addParam(name="linkB", value="#form.linkB#", cfsqltype="CF_SQL_VARCHAR");
local.drafts.setSQL("SELECT * from Messages where IsTemp=1 and LinkA = :linkA and LinkB = :linkA");
local.drafts.execute().getResult();
if (local.drafts.recordcount GT 0) {
local.attachments = new Query();
local.attachments.setDatasource("ICEchat");
local.attachments.setSQL("SELECT * FROM Attachments where id=2");
local.attachments.execute().getResult();
WriteOutput("{ Message: ");
for (i=1; i LTE local.drafts.recordcount; i=i+1) {
WriteOutput(local.drafts.message[i]);
}
WriteOutput(", Attachments: ");
for (i=1; i LTE local.attachments.recordcount; i=i+1) {
WriteOutput(local.drafts.url[i]);
if (i LT local.attachments.recordcount) {
WriteOutput(", ");
}
}
WriteOutput("}");
} else {
local.q = new Query();
local.q.setDatasource("ICEchat");
local.q.setSQL("INSERT INTO Messages VALUES(1,1,' ',1)");
local.q.execute();
WriteOutput("{ Message:"NA", Attachments:[]}");
}
</cfscript>
答案 2 :(得分:-3)
我一直在寻找同样错误的解决方案。我没有定义错误或构造错误。过去一天,他一直在与雷姆卡姆登聊天,但他所建议的一切都没有做到我需要的。我一直致力于从标准CF标签到cfscript的网站转换。
Ray建议使用.execute();什么是拉记录数,并建议这是所有需要的:x = queryExecute();将获取记录计数,其中(x)是查询。他建议不要使用getPrefix();但是我读到了.getPrefix();拉动记录的是什么。他很有经验我相信你知道Ray Camden,但无论我在我的代码中做什么,我都会遇到同样的错误。