запросы на холодный синтез - PullRequest
0 голосов
/ 22 апреля 2011

Каждый раз, когда я использую запрос, мне нужно войти в базу данных (поскольку у меня нет настройки ODBC для этого)

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

Мне не нравится, когда имя пользователя и пароль видны каждый раз, когда я делаю запрос. Я мог бы использовать #parameter#, но это лишь небольшое улучшение. Любые другие идеи, кроме настройки ODBC на сервере?

Ответы [ 2 ]

6 голосов
/ 22 апреля 2011

Если вы используете источник данных, вам не нужно указывать имя пользователя и пароль, они предоставляются при настройке источника данных. Если вы не настроили источник данных в Администраторе CF, то вам придется использовать атрибуты имени пользователя и пароля пользователя, но вам также нужно будет предоставить и информацию о сервере БД.

Итак, короче, просто вытащите свое имя пользователя и пароль, и все будет в порядке.

Кроме того, рекомендуется использовать значения, передаваемые в ваш запрос (в данном случае, session.userid). cfqueryparam не только помогает защитить вас от проблем безопасности, таких как атаки с использованием SQL-инъекций, он также сообщает серверу базы данных создать подготовленный оператор, который будет повторно использоваться при последующих вызовах запроса, и, таким образом, повысит производительность ваших запросов.

2 голосов
/ 22 апреля 2011

Иногда людям не нравится вводить свои имя пользователя и пароль в CF Admin, и существует простой способ, который заключается в том, чтобы поместить информацию о вашем источнике данных в 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 меняется, вам нужно всего лишь изменить его в одном месте.

...