从cfscript中的coldfusion newQuery()获取结果元数据

从cfscript中的coldfusion newQuery()获取结果元数据,coldfusion,cfquery,Coldfusion,Cfquery,关于CFscript的文档在文档中有点稀疏,搜索CFscript特定的答案在CF标签答案中丢失。所以我的问题是: 如何从使用脚本执行的查询中获取结果元数据?使用标记,我可以将result=“myNamedResultVar”添加到我的cfquery中。然后,我可以参考查询name获取数据,或者参考myNamedResultVar获取一些元数据。然而,现在我试图用脚本编写所有内容,所以我的组件是基于脚本的,从上到下。我最终想要的是从MySQL插入中插入的最后一个Id。该ID存在于结果元数据中 my

关于CFscript的文档在文档中有点稀疏,搜索CFscript特定的答案在CF标签答案中丢失。所以我的问题是:

如何从使用脚本执行的查询中获取结果元数据?使用标记,我可以将
result=“myNamedResultVar”
添加到我的cfquery中。然后,我可以参考查询
name
获取数据,或者参考
myNamedResultVar
获取一些元数据。然而,现在我试图用脚本编写所有内容,所以我的组件是基于脚本的,从上到下。我最终想要的是从MySQL插入中插入的最后一个Id。该ID存在于
结果
元数据中

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)


但是,在插入时,
getResult()
尽可能返回空值。因此插入后,
r.getPrefix().generatedkey
不起作用。我得到了
r
是未定义的

经过一些未来。。。这似乎有效

... tmp = q.execute( sql=sql );

        var  r = tmp.getPrefix( q ).generatedkey;

        q.clearParams();

    return r;

首先获取查询的
result
属性,然后从中尝试获取result中的
prefix
属性。但事实并非如此。您可以直接获得
prefix
属性,然后获得生成的密钥,如下所示:

tmp.getPrefix().generatedkey;

作为参考,您可以查看此博客条目:

问题出在哪里
r.getPrefix().generatedkey
将获取插入的记录ID。在select上-我认为您是正确的。。。但是,在插入时,getResult()返回一个空值。因此,r.getPrefix().generatedkey在插入后不起作用。我知道r是未定义的哪个版本的ColdFusion?很好。在我看来,对于Adobe来说,这是一个糟糕的方法名称选择。鉴于标记版本使用
result
返回
generatedkey
,大多数人自然会尝试
getResult()
。但是,文档中提到了神秘命名的
getPrefix()
方法就是您想要在这里使用的方法:Prefix:相当于cfquery标记的result属性。
tmp.getPrefix().generatedkey;