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>


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow