Я пытаюсь преобразовать некоторые из моих операторов SQL для использования параметров вместо простого добавления значений, а некоторые из моих операторов требуют ввода используемого столбца, а также значения для поиска.
Вот несколько примеров: на других языках, однако я должен написать это в ASP Classi c, и я не очень знаком с тем, как на самом деле работают параметры в ADODB.Command
Это упрощенная функция, которую я пробовал сделать ...
Function GetUser(environment, key, value)
Dim statement, cmd
Set cmd = Server.CreateObject("ADODB.Command")
statement = "SELECT * FROM USERS WHERE "
cmd.Parameters.Append cmd.CreateParameter(, adChar, adParamInput, 50, key)
cmd.Parameters.Append cmd.CreateParameter(, adChar, adParamInput, 50, value)
statement = statement & " ? = ? "
cmd.Parameters.Append cmd.CreateParameter(, adInteger, adParamInput, , environment)
statement = statement & " AND user_environment = ?"
cmd.ActiveConnection = conn
cmd.CommandType = adCmdText
cmd.CommandTimeout = 900
cmd.CommandText = statement
Set GetUser = cmd.Execute
Set cmd = Nothing
End Function
Я понимаю, что при нормальном использовании параметров он в основном сохраняет значение в формате, заданном типом ввода. При этом, насколько мне известно, подготовленный оператор будет выглядеть примерно так:
SELECT * FROM users WHERE 'user_id' = '1' AND user_environment = 2;
Этот оператор, включенный в sql, работает, однако при выполнении я всегда получаю 0 результатов.
При этом, мой вопрос, есть ли способ достичь того, что я пытаюсь сделать? Мне в значительной степени нужно иметь возможность отправить имя столбца, а также значение, которое будет найдено для этой функции, но я должен быть в состоянии защитить его от sql инъекций.