ColdFusion: Попытка запросить базу данных в CFScript - PullRequest
9 голосов
/ 11 февраля 2012

Мой начальник хочет, чтобы я использовал cfscript вместо тегов для взаимодействия с базой данных. Кто-нибудь знает какие-нибудь хорошие учебники? Я купил книгу по разработке приложений Adobe ColdFusion, том 2. Но в ней мало что написано. Я сделал гугл и нашел этот сайт , но он мало что объяснил.

Кто-нибудь знает какие-либо хорошие руководства по доступу к базе данных в 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 ]

10 голосов
/ 11 февраля 2012

Из 4-й ссылки в Google для "cfscript query tutorial":

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

6 голосов
/ 11 февраля 2012

Не проверял это, но это должно сделать.

<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 голосов
/ 23 апреля 2016

Я искал решение для той же ошибки. Я получаю не определенные ошибки или ошибки конструирования. В течение последнего дня я разговаривал с Рэем Камденом, но все, что он предлагал, тоже не делает то, что мне нужно. Я работал над преобразованием веб-сайта из стандартных тегов CF в cfscript.

Рэй предположил, что .execute (); это то, что извлекает учетную запись и предполагает, что это все, что нужно: x = queryExecute (); получит счет записи, где (x) является запросом. Он предложил не использовать getPrefix (); но я читал, что .getPrefix (); это то, что тянет рекорд Он опытный, я уверен, что вы знаете Рэя Камдена, но я продолжаю получать одну и ту же ошибку, независимо от того, что я пытаюсь делать внутри моего кода.

...