У меня есть код, который вставляет запись в журнал вместе с информацией о запросе. Как только запрос отправляется и ответ отправляется обратно, я обновляю запись с информацией о ответе. Есть ли способ получить идентификатор недавно вставленной записи, чтобы я мог ссылаться на нее и обновлять ее после получения ответа? Я знаю, используя теги CF, которые вы можете использовать SET NO COUNT, но он не работает в CFScript. Кажется, что ничего не возвращается в инструкции INSERT.Получить недавно вставленный идентификатор записи в CFScript
query = new query();
query.name = "queryResult";
query.setDataSource('dsn');
sql = "
INSERT INTO paymentlogs (
type, name, address1, address2, country, provstate, city, pocode, cclastfour, expirymonth, expiryyear, cardtype, requestxml, ipaddress, clid, subscriptionid, total, createdat, createdby, updatedat, updatedby
)
VALUES
(
:type, :name, :address1, :address2, :country, :provstate, :city, :pocode, :cclastfour, :expirymonth, :expiryyear, :cardtype, :requestxml, :ipaddress, :clid, :subscriptionid, :total, :now, :username, :now, :username
)
";
query.setSQL(sql);
query.addParam(name="clid", cfsqltype="cf_sql_varchar", value="#formValues.clid#");
query.addParam(name="type", cfsqltype="cf_sql_varchar", value="#arguments.type#");
query.addParam(name="name", cfsqltype="cf_sql_varchar", value="#formValues.ccname#");
query.addParam(name="address1", cfsqltype="cf_sql_varchar", value="#formValues.ccaddress1#");
query.addParam(name="address2", cfsqltype="cf_sql_varchar", value="#formValues.ccaddress2#");
query.addParam(name="country", cfsqltype="cf_sql_varchar", value="#formValues.cccountry#");
query.addParam(name="provstate", cfsqltype="cf_sql_varchar", value="#formValues.ccprovstate#");
query.addParam(name="city", cfsqltype="cf_sql_varchar", value="#formValues.cccity#");
query.addParam(name="pocode", cfsqltype="cf_sql_varchar", value="#formValues.ccpocode#");
query.addParam(name="cclastfour", cfsqltype="cf_sql_varchar", value="#Right(formValues.ccnumber, 4)#");
query.addParam(name="expirymonth", cfsqltype="cf_sql_varchar", value="#formValues.ccexpirymonth#");
query.addParam(name="expiryyear", cfsqltype="cf_sql_varchar", value="#formValues.ccexpiryyear#");
query.addParam(name="cardtype", cfsqltype="cf_sql_varchar", value="#getCardType(formValues.cctype)#");
query.addParam(name="requestxml", cfsqltype="cf_sql_varchar", value="#soapBody#");
query.addParam(name="ipaddress", cfsqltype="cf_sql_varchar", value="#CGI.REMOTE_ADDR#");
query.addParam(name="subscriptionid", cfsqltype="cf_sql_varchar", value="#formValues.subscriptionid#");
query.addParam(name="total", cfsqltype="cf_sql_float", value="#formValues.grandTotalAmount#");
query.addParam(name="username", cfsqltype="cf_sql_varchar", value="#formValues.username#");
query.addParam(name="now", cfsqltype="cf_sql_timestamp", value="#now()#");
result = query.execute().getResult();
writedump(result);abort;
Я искал Google и не смог найти способ сделать это в CFScript. Я не хочу запрашивать таблицу для последней строки, потому что это не очень надежно. Есть ли способ получить вновь вставленный идентификатор записи после выполнения запроса INSERT?
Я использую mySQL. Странная вещь, когда я выгружаю переменную «результат» выше, CF жалуется, что результат не определен. Когда я проверяю таблицу, я вижу, что скрипт выполнялся, и запись была вставлена.
* RE: используя CF-метки, вы можете использовать SET NO COUNT, но, похоже, это не работает в CFScript * 'SET NOCOUNT' - это специальная команда SQL Server. [Нет эквивалента MySQL] (http://stackoverflow.com/questions/3386217/is-there-an-equivalent-to-sql-servers-set-nocount-in-mysql). Вот почему это не работает для вас. Сказав это, обычно «SET NOCOUNT» требуется только для вставок, когда запрос делает больше, чем просто один «INSERT». – Leigh