我已经看过如何使用Application.cfc而不是使用Application.cfm来做这件事 - 这很好,我喜欢学习新东西。然而,在我做出改变之后,我无法弄清楚如何使DSN正常工作。在我刚在Application.cfm文件中使用set DSN
之前。
<cfparam name="DSN" default="">
<cfset DSN = "krl" />
在这里叫出来:
<CFQUERY NAME="Inital" DATASOURCE="#DSN#">
SELECT Website_Name
FROM InitalizationData
</CFQUERY>
现在设置如下:
component {
this.name = "app";
this.Sessionmanagement = true;
this.datasource = "krl";
public void function onSessionStart() {
// initialize cart
session.cart = [];
}
}
如何在查询中调用它?
答案 0 :(得分:0)
在Application.cfc
内,您通常会添加一个函数onApplicationStart()
。然后,在该函数内定义
application.dsn = "foo";
并像这样引用它:
<cfquery name="test" datasource="#application.dsn#">
在CFC中将变量定义为this.datasource
时,this
范围仅存在于该CFC的上下文中。它无法从外部访问。
答案 1 :(得分:-1)
我可以在任何CFM页面中使用this.datasource
。例如:
<cfinsert tableName="#variables.type#s" dataSource="#this.datasource#">
Application.cfc看起来像这样:
<cfcomponent
displayname="Application"
output="true"
hint="Handle the application.">
<!--- Set up the application. --->
<cfset THIS.Name = "#cgi.server_name#" />
<cfset THIS.SessionManagement = true />
<cfset THIS.ApplicationTimeout = CreateTimeSpan( 1, 0, 0, 0 ) />
<cfset THIS.SessionTimeout = CreateTimeSpan( 0, 0, 30, 0 ) />
<cfset THIS.SetClientCookies = true />
<!--- FOR THE DATASOURCE --->
<cfset this.datasource = "MyDSN" />
...
</cfcomponent>
然而,在常规标签中,您根本不需要指定数据源,如果它在此范围内:
<cfquery name="get">
SELECT id
FROM restaurants
WHERE email = '#something#'
UNION
SELECT id
FROM individuals
WHERE email = '#something#'
</cfquery>