2014-12-30 3 views
2

Я пытаюсь использовать переменную ruby ​​внутри оператора sql. Следующий код работает и удаляет вторую запись таблицы шаблонов. Как заменить этот номер на мою пользовательскую переменную «deleteid»?ruby ​​variable in sql statement

deleteid = gets.chomp 
$db.execute %q{DELETE FROM templates 
WHERE id = 2} 
+3

Какая база данных находится в '$ db'? Простое бросание неопределенных значений в SQL является уголовно безответственным. –

ответ

3

Вы можете использовать интерполяцию строки:

$db.execute %{DELETE FROM templates WHERE id = #{deleteid}} 

$db.execute %Q{DELETE FROM templates WHERE id = #{deleteid}} 

UPDATE

Пользователь может передать произвольную строку. Использование deleteid может быть опасным. Как комментировал @muistooshort, вам следует избегать deleteid.

Обратитесь к документации вашего db-драйвера к методам, которые принимают параметр и упускают параметр (или метод prepare).

Например, если вы используете sqlite3-ruby, вы можете использовать Database#query, который сбежит для вас.

$db.prepare(%q{DELETE FROM templates WHERE id = ?}, [deleteid]) 

в пг, используйте Connection#exec_params:

водитель
$db.exec_params(%q{DELETE FROM templates WHERE id = $1}, [deleteid]) 
+0

@muistooshort, Вы правы. Спасибо за ваш комментарий. – falsetru