使用cfscript从ColdFusion的newQuery()获取结果元数据

4

在文档中,关于CFscript的说明有点匮乏,搜索关于cfscript特定问题的答案会淹没在CF标签答案中。因此,这是我的问题:

如何从使用脚本执行的查询中获取结果元数据?使用标签,我可以在我的cfquery中添加result="myNamedResultVar"。然后,我可以引用查询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 );
var r = tmp.getResult();
    r = r.getPrefix().generatedkey;

q.clearParams();

return r;

然而,在插入操作中,getResult()似乎返回NULL。因此,在插入操作后,r.getPrefix().generatedkey不起作用。我得到了r未定义的错误。


问题是什么?r.getPrefix().generatedkey将获取已插入记录的ID。 - Beginner
在一个select语句中 - 我想你是正确的... 但是在一个insert语句中,根据我所知,getResult()返回NULL。 因此,在插入之后,r.getPrefix().generatedkey不起作用。 我得到r未定义。 - j-p
1
ColdFusion 的哪个版本? - Adam Cameron
2个回答

3

1
很好的发现。在我看来,Adobe 在方法命名上做出了不好的选择。由于标签版本使用 result 返回 generatedkey,自然大多数人会尝试使用 getResult()。然而,文档提到了一个神秘的命名为 getPrefix() 的方法是你想要的:前缀:等同于 cfquery 标签的 result 属性 - Leigh

1
在一些调试后... 这个似乎可以工作。
... tmp = q.execute( sql=sql );

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

        q.clearParams();

    return r;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接