Coldfusion 无法将日期类型插入 MySQL

问题描述

我使用 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 作为错误消息,现在我收到了 MysqLNo matching property [GENERATED_KEY] found

知道我能做什么吗?

问候

解决方法

有一个 Lucee dev forum post 表明变量名为 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;