Coldfusion 无法将日期类型插入 MySQL
Coldfusion can not insert date type into MySQL
我使用 Framework7 作为前端以及 Coldfusion fw1 4.2 (Lucee 5.3) 用于 ajax JSON 响应。我已经编写了以下 model\services 代码(fw1 中没有语法错误),通过适当的控制器调用 return 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 来 运行 这段代码,我收到一个 JSON 响应,错误=1 而不是成功=1。此外,我删除了第二个查询以及交易括号,只留下 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
for MYSQL.
知道我能做什么吗?
此致
有一个 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;
我使用 Framework7 作为前端以及 Coldfusion fw1 4.2 (Lucee 5.3) 用于 ajax JSON 响应。我已经编写了以下 model\services 代码(fw1 中没有语法错误),通过适当的控制器调用 return 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 来 运行 这段代码,我收到一个 JSON 响应,错误=1 而不是成功=1。此外,我删除了第二个查询以及交易括号,只留下 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
for MYSQL.
知道我能做什么吗?
此致
有一个 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;