2013-10-02 3 views
2

Мне не нравится полагаться на позиционные параметры, можно ли это сделать с HDBC?поддерживает Database.HDBC именованные параметры?

В качестве аргументов для различных выполняемых функций this package я мог видеть проходящий [(String, SqlValue)] вместо [SqlValue].

В двух словах, я бы скорее

select 
    t.f1 
    , t.f2 
    , t.f3 
from 
    schema.table t 
where 
t.f1 > @param1 
and t.f2 < @param2 

чем

select 
    t.f1 
    , t.f2 
    , t.f3 
from 
    schema.table t 
where 
t.f1 > ? 
and t.f2 < ? 

ответ

1

Не с hdbc напрямую, но я делаю это с помощью Шекспиром-текста пакета:

quickQuery cn (T.unpack 
       [st|select bar, baz, foo 
         from table1 r 
         inner join location l on r.locat_id = l.location_id 
         where r.record_id = #{pageIdxId page} 
         and foo > #{var1 + var2} 
         order by 1|]) [] 

Уведомлять переменные haskell и выражения в # {} заполнителях.

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

использовать функцию sql escaping со строковыми значениями.

sqlEscape :: Text -> Text 
sqlEscape = T.replace "'" "''" 

затем

[st|update foo set bar = '#{sqlEscape someString}' where recid = #{myRecId}|] 

Или, если вы до задачи, вы можете взять Шекспир-текстовую библиотеку и добавить небольшие изменения к нему, чтобы автоматически избежать всех IsString типов.

+0

Спасибо, это подход, который я не предполагал; В настоящее время я делаю это так declare (at) param1 type declare (at) param2 type set (at) param1 =? set (at) param2 =? ... остальное утверждение Проблема со строчной интерполяцией обрабатывает потенциальные инъекции sql со связанными параметрами. Я знаю, что я в безопасности (до тех пор, пока нет динамического sql, сгенерированного под капотом) – smoothdeveloper

+0

будьте осторожны с использованием hdbc placeholderes для обновления/вставки. У них неприятная ошибка. Они добавляют дополнительное пространство в конце значения. Я исправил ошибку на github https://github.com/hdbc/hdbc-odbc/pull/10, но он по-прежнему не принимается в основной репозиторий –

Смежные вопросы