13

我试图弄清楚如何在将 SQL 字符串交给执行之前对其进行参数化,但遗憾的是我在互联网上找到了很多这样的东西:

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

这是一件坏事……但是,在底层Sequel库中可以使用参数化 sql 查询,这是 TinyTDS 构建的基础。所以我知道这是可能的。我只是很难弄清楚。

我真的希望它可以像这样简单:

@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 回答