2012-02-11 54 views
8

我的老板希望我使用cfscript而不是标签进行数据库交互。有人知道任何好的教程吗?我购买了Adobe ColdFusion应用程序开发书,第2卷。但它没有太多的脚本。我没有谷歌,发现this site,但它没有解释太多。ColdFusion:试图在CFScript中查询数据库

是否有任何机构知道访问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> 
+3

你说得对,杰克,这很糟糕。但是,我花了不到一分钟的时间来修复它。哪个更具有建设性:抱怨或修复它? – 2012-02-11 02:15:03

+0

那么,这里是官方文档。 http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSe9cbe5cf462523a0693d5dae123bcd28f6d-7ffb.html – 2012-02-11 02:23:48

+1

@AdamTuttle当然,你是对的。在忽略这样的事情时会发现更多的美德。 – 2012-02-11 03:32:25

回答

9

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()

+0

嗨可以查询和执行查询对象,但是当我尝试获取关于equerry的信息,即drafts.record计数或drafts.Messag [0],我得到一个错误,说drafts.record计数定义或drafts.Messag [0 ]任何想法? – 2012-02-12 00:34:18

+0

嗨,好吧,我没有得到结果对象的信息。谢谢你的ost,它给了我足够的enfo来完成我的项目:) – 2012-02-12 08:30:26

+0

你对serializeJson()亚当:)信心很大 – 2012-02-13 06:49:26

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> 
+0

N1可以查询和执行查询对象,但是当我尝试获取关于equerry的信息时,即drafts.record计数或drafts.Messag [0],我收到一个错误说drafts.record计数定义 – 2012-02-12 00:32:30

-2

我一直在寻找相同错误的解决方案。我没有定义错误或构造错误。过去一直和Ray Camden聊天,但他所建议的一切都没有做到我所需要的。我一直致力于从标准CF标签到cfscript的网站转换。

Ray建议.execute();是什么拉记录计数,并建议这是所有需要:x = queryExecute();将(x)作为查询来获取记录计数。他建议不要使用getPrefix();但我读了.getPrefix();是什么拉记录数。他是有经验的,我相信你知道Ray Camden,但是无论我在代码中尝试做什么,我都会得到同样的错误。

+2

FYI,堆栈溢出使用问答格式(问题和答案)。本部分仅适用于“答案”。如果您认为自己找到了与已经建议的解决方案不同的解决方案,请将上述内容改为“答案”的形式。否则,可能会将其作为[评论](http://stackoverflow.com/help/privileges/comment)删除,而不是针对所提问题的“答案”。 – Leigh 2016-04-23 13:22:38