13

SQL文字列を実行するために渡す前にパラメータ化する方法を見つけようとしていますが、残念ながらインターネット上でこれをたくさん見つけています:

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

これは悪いことです...しかし、SQLクエリのパラメータ化は、TinyTDSがその上に構築されている基礎となるSequelライブラリで利用できます。だから私はそれが可能であることを知っています。私はそれを理解するのに苦労しています。

私はそれがこれと同じくらい簡単であることを本当に願っています:

@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ので、単純なインスタンス化は間違った方法のようです。

4

1 に答える 1

3

TinyTds をアダプターとして Sequel gem を実装しました。これにより、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 データベースに接続しています。

于 2015-07-13T14:53:06.207 に答える