coldfusion
Запросы базы данных
Поиск…
Работа с базами данных
Одной из сильных сторон 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>