coldfusion
Zapytania do bazy danych
Szukaj…
Praca z bazami danych
Jedną z mocnych stron ColdFusion jest łatwość pracy z bazami danych. Oczywiście dane wejściowe zapytania można i należy sparametryzować.
Implementacja tagów
<cfquery name="myQuery" datasource="myDatasource" result="myResult">
select firstName, lastName
from users
where lastName = <cfqueryparam value="Allaire" cfsqltype="cf_sql_varchar">
</cfquery>
Implementacja 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);
Wstawianie wartości jest równie łatwe:
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;
Podstawowy przykład
Połączenia z bazą danych są konfigurowane za pomocą narzędzia CF Administrator. Zobacz Połączenia z bazą danych, aby dowiedzieć się, jak podłączyć źródło danych.
Aby wykonać zapytania, wystarczy tag <cfquery> . <cfquery> łączy się z bazą danych i otwiera dla ciebie bazę danych, wystarczy podać jej nazwę źródła danych.
<cfquery name="Movies" datasource="Entertainment">
SELECT title
FROM Movies
</cfquery>
Aby wyświetlić wyniki zapytania:
<cfoutput query="Movies">
#title#<BR>
</cfoutput>
Poświadczenie
Wiele konfiguracji bazy danych wymaga uwierzytelnienia (w postaci nazwy użytkownika i hasła), zanim będzie można wykonać zapytanie do bazy danych. Możesz je podać przy użyciu nazwy użytkownika i hasła.
Uwaga: nazwę użytkownika i hasło można również skonfigurować względem źródła danych w programie ColdFusion Administrator. Podanie tych szczegółów w zapytaniu zastępuje nazwę użytkownika i hasło w Administratorze ColdFusion.
<cfquery datasource="Entertainment" username="webuser" password="letmein">
select *
from Movies
</cfquery>
Zapytania buforowane
Zapytanie buforowane to zapytanie, którego wyniki są przechowywane w pamięci serwera. Wyniki są zapisywane przy pierwszym uruchomieniu zapytania. Odtąd, za każdym razem, gdy zapytanie zostanie ponownie zażądane, ColdFusion pobierze wyniki z pamięci.
Możesz buforować zapytanie, używając atrybutu cachedAfter . Jeśli zapytanie zostało ostatnio uruchomione po podanej dacie, używane są buforowane dane. W przeciwnym razie zapytanie zostanie ponownie uruchomione.
<cfquery datasource="Entertainment" cachedAfter="July 20, 2016">
select *
from Movies
</cfquery>
Aby można było użyć pamięci podręcznej i uniknąć wielu wywołań bazy danych, bieżące zapytanie musi używać tej samej instrukcji SQL, źródła danych, nazwy zapytania, nazwy użytkownika i hasła, co użyte zapytanie buforowane. Obejmuje to spację w zapytaniu.
W związku z tym następujące zapytania tworzą różne pamięci podręczne, mimo że przycięte znaki są takie same, a wyniki zapytania są identyczne:
<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>
Ograniczanie liczby zwracanych rekordów
Możesz ograniczyć liczbę zwracanych wierszy za pomocą atrybutu maxrows .
<cfquery datasource="Entertainment" maxrows="50">
select *
from Movies
</cfquery>
Limit czasu
Limit czasu można ustawić za pomocą atrybutu timeout . Może to być przydatne w zapobieganiu, aby żądania działały znacznie dłużej niż powinny i w rezultacie wpływały na całą aplikację.
Atrybut timeout określa maksymalną liczbę sekund, jaką każda akcja zapytania może wykonać przed zwróceniem błędu.
<cfquery datasource="Entertainment" timeout="30">
select *
from Movies
</cfquery>