coldfusion查询

时间:2011-04-21 20:53:58

标签: coldfusion cfquery

我在使用查询的任何时候都需要登录数据库(因为我没有ODBC设置来执行此操作)

<cfquery name="rsUser" datasource="dbname" username="admin" password="adminpass">
    SELECT * 
    FROM dbo.UsersView
    WHERE UserID = #session.userid#
</cfquery>

我不喜欢的部分是每次进行查询时都可以看到用户名和密码。我可以使用#parameter#,但这只是一个小改进。除了在服务器上设置ODBC之外的任何其他想法吗?

2 个答案:

答案 0 :(得分:6)

如果您使用的是数据源,则无需提供用户名和密码,在设置数据源时会提供这些用户名和密码。如果您没有在CF管理员中设置数据源,则必须使用用户名和密码属性,但您还必须提供数据库服务器信息。

因此,简而言之,只需提取您的用户名和密码,就可以了。

此外,最佳做法是使用传递给查询的值(在本例中为session.userid)。 cfqueryparam不仅有助于保护您免受SQL注入攻击等安全问题的影响,它还告诉数据库服务器创建一个准备好的语句,该语句将在后续的查询调用中重用,从而提高查询性能。

答案 1 :(得分:2)

有时人们不喜欢将他们的用户名和密码放入CF管理员,而且有一种简单的方法就是将您的数据源信息放在Application.cf(c | m)中。

如果使用Application.cfm,只需在Application.cfm

中的某处执行以下操作
Application.dsn = {
    datasource = 'mydatasource',
    username = 'myusername',
    password = 'mypassword'
}

如果使用Application.cfc,则将相同的代码放入onApplicationStart方法中。然后在您的查询中使用以下

<cfquery name="myquery" attributeCollection="#Application.dsn#">
     SELECT * FROM mytable
</cfquery>

正如您所看到的,这使您的代码更加美观且易于管理,如果您的DSN发生了变化,您只需在一个地方进行更改。