我一直在构建一个新的coldfusion应用程序,利用面向对象的方法和存储过程。虽然一切都像一个魅力,应用程序非常快,由于SP和优化的mysql代码,我真的很感激,如果你能帮我清除一件事:)我有dbcode.cfc,你可能已经猜到存储所有查询与存储过程。也就是说,一般来说,存储全局DNS参数的最佳方法是什么?
1.这可以用于一个全球DSN
<cfset this.datasource ="myDB">
2.这也可以用于一个全球DSN
<cffunction name="onApplicationStart" returnType="boolean" output="false">
<cfset application.dsn = "myDB">
<cfset application.username = "userName">
<cfset application.password = "password">
<cfreturn true>
</cffunction>
2.1以上所有内容,但onRequest
3.在我的情况下,我也可以在dbcode.cfc中创建全局变量
<cfset variables.dsn = "myDB">
<cfset variables.username = "userName">
<cfset variables.password = "password">
4.另外,人们可以使用类似的东西来设置多个数据源
<cffunction name="onApplicationStart" returnType="boolean" output="false">
<cfset application.myDSNs = StructNew()>
<cfset application.myDSNs.1 = "myDB1">
<cfset application.myDSNs.2 = "myDB2">
.
.
.
<!---something similar for usernames and passwords--->
</cffunction>
那么处理这类事情的最有效方法是什么?
答案 0 :(得分:1)
让我看看我是否可以回答您的DSN问题的每一部分。
将数据源设置为application.cfc构造函数的一部分是正确的
在OnApplicationStart()中设置DSN也有效,但您需要使用:
<cfset application.datasource = "myDB">
2.1在每个请求上设置数据源都是没有意义的,除非您的数据源随每个请求而变化。我怀疑是不是
您不应该触摸queries.cfc
。这是ColdFusion内部的,有可能破坏服务器上的所有内容。
您可能想要了解数组和结构之间的差异。看起来你想做的是:
<cfset application.myDSNs = ["MyDB1", "MyDB2]>
然后可以通过以下方式访问它们:
#application.myDSNs[1]#
#application.myDSNs[2]#
我不会这样做。数据库通常不是任何数组。每个服务器都有自己的用途。您的DSN应反映以下其中一项: