Подтвердить что ты не робот

Параметрирование SQL-запросов в Ruby + TinyTDS

Я пытаюсь выяснить, как параметризовать строку SQL перед тем, как передать ее для выполнения, но, к сожалению, я нахожу много этого в Интернете:

sql = "SELECT * FROM table_name WHERE thing LIKE '%#{input}%'"

Что плохо... однако, параметрирование sql-запросов доступно в базовой библиотеке Sequel, что и делает TinyTDS поверх. Поэтому я знаю, что это возможно. Мне просто сложно понять это.

Мне бы очень хотелось, чтобы это было так просто, как this:

@client = TinyTds::Client.new(
      :adapter => 'sqlserver',
      :host => host,
      :database => db,
      :username => username,
      :password => password)

sql = "SELECT * FROM table_name WHERE thing LIKE ?"
safe_sql = @client.prepare(sql, input)
result = @client.execute(safe_sql)

Кажется, я нашел что-то, называемое Dataset в исходном коде, который имеет метод подготовки. Вопрос в том, как мне его использовать? Мне нужно создать другой объект, прежде чем передать его методу execute() в объекте @client? Я не смог найти метод initialize или new, поэтому простое создание экземпляра кажется неправильным.

4b9b3361

Ответ 1

В качестве адаптера я применил Sequel gem с TinyTds. Это позволяет вам параметризовать SQL-запросы. См. Пример ниже:

require "tiny_tds"
require 'sequel' 

DB = Sequel.connect(
    adapter: 'tinytds', 
    host: "dataserver", 
    database: "database", 
    user: "username", 
    password: "password"
)

Затем я смог создать инструкцию вставки SQL с параметризованными значениями.

posts_table = DB[:posts]
posts_table.insert(:author => 'John Smith', :title => 'How to parametrize sql queries')

Я подключаюсь к базе данных MS SQL.