Получение метаданных результата из coldfusion newQuery() в cfscript

Документация по CFscript немного скудна в документации, и поиск ответов, специфичных для cfscript, теряется в ответах по тегам CF. Итак, вот мой вопрос:

Как получить метаданные результата из запроса, который был выполнен с помощью скрипта? Используя теги, я могу добавить result="myNamedResultVar" на мой запрос. Я могу тогда обратиться к запросу name для данных, или myNamedResultVar для некоторых метаданных. Тем не менее, сейчас я пытаюсь написать все в скрипте, поэтому мой компонент основан на скрипте сверху вниз. За чем я в конечном итоге следую - это последний вставленный идентификатор из вставки MySQL. Этот идентификатор существует в 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() возвращает NULL, насколько я могу судить. Итак r.getPrefix().generatedkey НЕ работает после вставки. я получил r не определено

2 ответа

Решение

Вы получаете result свойство запроса, а затем из этого вы пытаетесь получить prefix собственность в результате. Но это не так. Вы можете напрямую получить prefix свойство, а затем сгенерированный ключ, как это:

tmp.getPrefix().generatedkey;

Для справки вы можете проверить эту запись в блоге: Получение сгенерированного ключа из запроса в ColdFusion (включая запросы на основе сценариев)

После некоторого futzing... это похоже на работу

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

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

        q.clearParams();

    return r;
Другие вопросы по тегам