我在使用查询的任何时候都需要登录数据库(因为我没有ODBC设置来执行此操作)
<cfquery name="rsUser" datasource="dbname" username="admin" password="adminpass">
SELECT *
FROM dbo.UsersView
WHERE UserID = #session.userid#
</cfquery>
我不喜欢的部分是每次进行查询时都可以看到用户名和密码。我可以使用#parameter#
,但这只是一个小改进。除了在服务器上设置ODBC之外的任何其他想法吗?
答案 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发生了变化,您只需在一个地方进行更改。