Поиск…


Работа с базами данных

Одной из сильных сторон ColdFusion является то, насколько легко работать с базами данных. И, конечно, входные данные запроса могут и должны быть параметризованы.

Реализация тегов

<cfquery name="myQuery" datasource="myDatasource" result="myResult">
    select firstName, lastName
    from users
    where lastName = <cfqueryparam value="Allaire" cfsqltype="cf_sql_varchar">
</cfquery>

Реализация CFScript

// ColdFusion 9+
var queryService = new query(name="myQuery", datasource="myDatasource");
queryService.addParam(name="lName", value="Allaire", cfsqltype="cf_sql_varchar");
var result = queryService.execute(sql="select firstName, lastName from users where lastName = :lName");
var myQuery = result.getResult();
var myResult = result.getPrefix();

// ColdFusion 11+
var queryParams = {lName = {value="Allaire", cfsqltype="cf_sql_varchar"}};
var queryOptions = {datasource="myDatasource", result="myResult"};
var myQuery = queryExecute("select firstName, lastName from users", queryParams, queryOptions);

Вставка значений так же просто:

queryExecute("
    insert into user( firstname, lastname )
    values( :firstname, :lastname )
",{
    firstname: { cfsqltype: "cf_sql_varchar", value: "Dwayne" }
    ,lastname: { cfsqltype: "cf_sql_varchar", value: "Camacho" }
},{
    result: "local.insertResult"
});

return local.insertResult.generated_key;

Основной пример

Соединения с базой данных настраиваются с помощью инструмента CF Administrator. См. Раздел «Соединения базы данных» для подключения источника данных.

Для выполнения запросов все, что вам нужно, это <cfquery> . <cfquery> подключается и открывает базу данных для вас, все, что вам нужно сделать, это предоставить ему имя источника данных.

<cfquery name="Movies" datasource="Entertainment">
    SELECT title
    FROM   Movies
</cfquery>

Чтобы отобразить результаты запроса:

<cfoutput query="Movies">
    #title#<BR>
</cfoutput>

Аутентификация

Многие базы данных требуют проверки подлинности (в форме имени пользователя и пароля), прежде чем вы сможете запросить базу данных. Вы можете предоставить их с помощью атрибутов имени пользователя и пароля.

Примечание: имя пользователя и пароль также могут быть настроены на источник данных в ColdFusion Administrator. Предоставление этих данных в вашем запросе отменяет имя пользователя и пароль администратора ColdFusion.

<cfquery datasource="Entertainment" username="webuser" password="letmein">
    select *
    from Movies
</cfquery>

Кэшированные запросы

Кэшированный запрос - это запрос, который имеет свои результаты, хранящиеся в памяти сервера. Результаты сохраняются при первом запуске запроса. С тех пор, когда запрос запрашивается снова, ColdFusion будет извлекать результаты из памяти.

Вы можете кэшировать запрос, используя атрибут cachedAfter . Если запрос был последним после указанной даты, используются кэшированные данные. В противном случае запрос будет повторно запущен.

<cfquery datasource="Entertainment" cachedAfter="July 20, 2016">
    select *
    from Movies
</cfquery>

Чтобы использовать кеш и избежать множественных вызовов в базе данных, текущий запрос должен использовать тот же оператор SQL, источник данных, имя запроса, имя пользователя и пароль в качестве используемого кэшированного запроса. Это включает пробел в запросе.

Таким образом, следующие запросы создают разные кеши, хотя обрезанные символы одинаковы, а результаты запроса идентичны:

<cfquery datasource="Entertainment" cachedAfter="July 20, 2016">
    select *
    from Movies
    <cfif false>
    where 1 = 1
    </cfif>
    <cfif true>
    where 1 = 1
    </cfif>
</cfquery>

<cfquery datasource="Entertainment" cachedAfter="July 20, 2016">
    select * 
    from Movies
    <cfif true>
    where 1 = 1
    </cfif>
    <cfif false>
    where 1 = 1
    </cfif>
</cfquery>

Ограничение количества возвращенных записей

Вы можете ограничить количество возвращаемых строк, используя атрибут maxrows .

<cfquery datasource="Entertainment" maxrows="50">
    select *
    from Movies
</cfquery>

Таймауты

Вы можете установить ограничение таймаута, используя атрибут timeout . Это может быть полезно для предотвращения запросов, выполняемых гораздо дольше, чем они должны и влияют на все приложение в результате.

Атрибут timeout устанавливает максимальное количество секунд, в течение которых каждое действие запроса разрешено выполнять, прежде чем возвращать ошибку.

<cfquery datasource="Entertainment" timeout="30">
    select *
    from Movies
</cfquery>


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow