Sök…


Arbeta med databaser

En av ColdFusions styrkor är hur lätt det är att arbeta med databaser. Och naturligtvis kan och bör frågeställningar parametreras.

Implementering av tagg

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

CFScript-implementering

// 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);

Att lägga in värden är lika enkelt:

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;

Grundläggande exempel

Databasanslutningar konfigureras med CF-administratörsverktyget. Se databasanslutningar för hur du ansluter en datakälla.

För att köra frågor allt du behöver är <cfquery> -taggen. <cfquery> -taggen ansluter till och öppnar databasen för dig, allt du behöver göra är att förse den med datakällans namn.

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

Så här visar du sökresultaten:

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

autentisering

Många databaskonfigurationer kräver autentisering (i form av ett användarnamn och lösenord) innan du kan fråga databasen. Du kan ange dessa med attributen användarnamn och lösenord.

Obs: användarnamnet och lösenordet kan också konfigureras mot datakällan i ColdFusion-administratören. Att tillhandahålla dessa detaljer i din fråga åsidosätter användarnamnet och lösenordet i ColdFusion-administratören.

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

Cachade frågor

En cache-fråga är en fråga som har sina resultat lagrade i serverns minne. Resultaten lagras när frågan först körs. Därefter kommer ColdFusion att hämta resultaten från minnet närhelst den frågan begärs igen.

Du kan cachera en fråga med attributet cachedAfter . Om frågan senast kördes efter det levererade datumet används cachedata. Annars körs frågan igen.

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

För att cachen ska kunna användas och att flera samtal till databasen undviks måste den aktuella frågan använda samma SQL-sats, datakälla, frågornamn, användarnamn och lösenord som den cachade frågan som används. Detta inkluderar mellanrum i frågan.

Som sådan skapar följande frågor olika cacheminnet, även om de trimmade tecknen är desamma och frågeställningarna är identiska:

<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>

Begränsa antalet returnerade poster

Du kan begränsa antalet rader som ska returneras med attributet maxrows .

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

Tidsgränser

Du kan ställa in en tidsgräns med attributet timeout . Detta kan vara användbart för att förhindra att förfrågningar körs längre än de borde och påverka hela applikationen som ett resultat.

timeout attributet ställer in det maximala antalet sekunder som varje åtgärd i en fråga får utföra innan ett fel returneras.

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow