从 cfscript 中的 coldfusion newQuery() 获取结果元数据
getting result metadata from coldfusion newQuery() in cfscript
文档中关于 CFscript 的文档有点稀疏,搜索特定于 cfscript 的答案会在 CF 标签答案中丢失。所以这是我的问题:
如何从使用脚本执行的查询中获取结果元数据?使用标签,我可以将 result="myNamedResultVar"
添加到我的 cfquery。然后我可以参考查询 name
获取数据,或参考 myNamedResultVar
获取一些元数据。但是,现在我正在尝试用脚本编写所有内容,因此我的组件是基于脚本的,从上到下。我最终想要的是 MySQL 插入中最后插入的 ID。该 ID 存在于 result
元数据中。
myNamedResultVar.getPrefix().generatedkey
这是我的查询代码:
public any function insertUser( required string name, required string email, required string pass ) {
// insert user
var sql = '';
var tmp = '';
var q = new query();
q.setDatasource( application.dsn );
q.addParam(
name='name'
,value='#trim( arguments.name )#'
,cfsqltype='CF_SQL_VARCHAR'
);
q.addParam(
name='email'
,value='#trim( arguments.email )#'
,cfsqltype='CF_SQL_VARCHAR'
);
q.addParam(
name='pass'
,value='#hashMyString( arguments.pass )#'
,cfsqltype='CF_SQL_VARCHAR'
);
sql = 'INSERT INTO
users
(
name
,email
,pass
,joined
,lastaccess
)
VALUES
(
:name
,:email
,:pass
,CURRENT_TIMESTAMP
,CURRENT_TIMESTAMP
);
';
tmp = q.execute( sql=sql );
q.clearParams();
}
如何指定结果数据?我试过这样的事情:
...
tmp = q.execute( sql=sql );
var r = tmp.getResult();
r = r.getPrefix().generatedkey;
q.clearParams();
return r;
但是,在插入 getResult()
returns 时,据我所知是 NULL。所以 r.getPrefix().generatedkey
在插入后不起作用。我得到 r
未定义
经过一些 futzing...这似乎有效
... tmp = q.execute( sql=sql );
var r = tmp.getPrefix( q ).generatedkey;
q.clearParams();
return r;
您首先获取查询的 result
属性,然后尝试从中获取 prefix
属性 结果。但这种情况并非如此。您可以直接获取 prefix
属性 然后生成密钥,如下所示:
tmp.getPrefix().generatedkey;
作为参考,您可以查看此博客条目:Getting the Generated Key From A Query in ColdFusion (Including Script Based Queries)
文档中关于 CFscript 的文档有点稀疏,搜索特定于 cfscript 的答案会在 CF 标签答案中丢失。所以这是我的问题:
如何从使用脚本执行的查询中获取结果元数据?使用标签,我可以将 result="myNamedResultVar"
添加到我的 cfquery。然后我可以参考查询 name
获取数据,或参考 myNamedResultVar
获取一些元数据。但是,现在我正在尝试用脚本编写所有内容,因此我的组件是基于脚本的,从上到下。我最终想要的是 MySQL 插入中最后插入的 ID。该 ID 存在于 result
元数据中。
myNamedResultVar.getPrefix().generatedkey
这是我的查询代码:
public any function insertUser( required string name, required string email, required string pass ) {
// insert user
var sql = '';
var tmp = '';
var q = new query();
q.setDatasource( application.dsn );
q.addParam(
name='name'
,value='#trim( arguments.name )#'
,cfsqltype='CF_SQL_VARCHAR'
);
q.addParam(
name='email'
,value='#trim( arguments.email )#'
,cfsqltype='CF_SQL_VARCHAR'
);
q.addParam(
name='pass'
,value='#hashMyString( arguments.pass )#'
,cfsqltype='CF_SQL_VARCHAR'
);
sql = 'INSERT INTO
users
(
name
,email
,pass
,joined
,lastaccess
)
VALUES
(
:name
,:email
,:pass
,CURRENT_TIMESTAMP
,CURRENT_TIMESTAMP
);
';
tmp = q.execute( sql=sql );
q.clearParams();
}
如何指定结果数据?我试过这样的事情: ... tmp = q.execute( sql=sql );
var r = tmp.getResult();
r = r.getPrefix().generatedkey;
q.clearParams();
return r;
但是,在插入 getResult()
returns 时,据我所知是 NULL。所以 r.getPrefix().generatedkey
在插入后不起作用。我得到 r
未定义
经过一些 futzing...这似乎有效
... tmp = q.execute( sql=sql );
var r = tmp.getPrefix( q ).generatedkey;
q.clearParams();
return r;
您首先获取查询的 result
属性,然后尝试从中获取 prefix
属性 结果。但这种情况并非如此。您可以直接获取 prefix
属性 然后生成密钥,如下所示:
tmp.getPrefix().generatedkey;
作为参考,您可以查看此博客条目:Getting the Generated Key From A Query in ColdFusion (Including Script Based Queries)