Получение метаданных результата из 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;