0

我将 Framework7 与 Coldfusion fw1 4.2 (Lucee 5.3) 一起用作 ajax JSON 响应的前端。我编写了以下模型\服务代码(在 fw1 中没有语法错误),该代码通过适当的控制器调用以返回 JSON 响应标志成功或失败。

所有参数都是字符串,因为我已经通过适当的 getMetadata(parameter).getName()

function judge_add(string name,string usernum,string judgename,string judgedate){

    local.status={};
   
    var arrayDate=listToArray(judgedate,"-");
    var dateadded=createDate(arrayDate[1],arrayDate[2],arrayDate[3]);

    transaction{

        try{
            
            myQry1=new Query();
            myQry1.setDatasource(name);
            myQry1.addParam(name="judgename", value="#judgename#", cfsqltype="CF_SQL_VARCHAR");
            myQry1.addParam(name="dateadded", value="#DateFormat(dateadded,'YYYY-MM-DD')#", cfsqltype="CF_SQL_DATE");
            myQry1.setSQL("INSERT INTO judge (name,assigned) VALUES (:judgename,:dateadded)");
            myQry1.execute();
           
           
            var judge_added=myQry1.execute().getResult().GENERATED_KEY;

            
            myQry2=new Query();
            myQry2.setDatasource(name);
            myQry2.addParam(name="judge_added", value="#judge_added#", cfsqltype="CF_SQL_INTEGER");
            myQry2.addParam(name="usernum", value="#Val(usernum)#", cfsqltype="CF_SQL_INTEGER");
            myQry2.setSQL("INSERT INTO users_judge (judgeid,userid) VALUES (:judge_added,:usernum)");
            myQry2.execute();

            transaction action="commit";
                             
            local.status.success=1;

        }catch(any e){
            
            local.status.msg=e.Message;
            local.status.error=1;
            transaction action="rollback"; 
            
         }
    }

    return local.status;

}
  

使用 Framework7 运行此代码,我收到一个错误 = 1 而不是成功 = 1 的 JSON 响应。此外,我删除了第二个查询以及事务括号,只留下 try/catch 仍然是相同的错误。另外,我用CF_SQL_TIMESTAMP代替CF_SQL_DATE,还是一样,没有MySQL数据插入,抛出异常。最后,我添加了 local.status.msg=e.Message,以便通过 json 响应详细描述我的错误。起初我得到了The named parameter [local] has not been provided错误消息,现在我得到No matching property [GENERATED_KEY] found了 MYSQL。

知道我能做什么吗?

问候

4

1 回答 1

1

有一个Lucee 开发论坛帖子表明该变量被调用generatedkey(没有下划线)。

那里发布的示例代码如下所示:

<cfquery name ="insertData" datasource="testDs" result="res">
    INSERT INTO test ( name ) VALUES ( 'lucee' )
</cfquery>
<cfdump var="#res.generatedkey#" />

解决此问题的另一种方法是在 INSERT 之后选择生成的 ID 并改为使用它。

这可以通过执行来完成SELECT last_insert_id()

所以你需要在你的第一个查询之后添加这个:

myQryId=new Query();
myQryId.setDatasource(name);
myQryId.setSQL("SELECT last_insert_id() AS id");
var judge_added=myQryId.execute().getResult().id;
于 2021-03-15T19:01:43.027 回答