2010-03-16 44 views
2

我需要使用Ruby来创建一个MySQL数据库的SQL语句。 Ruby永远不会连接到数据库。 SQL语句将被发送到另一个站点并针对MySQL数据库执行。使用Ruby DBI准备没有句柄?

由于运行Ruby没有到数据库连接的机器,是有可能使用DBI的,而无需创建一个句柄到MySQL数据库的准备语句?

回答

2

ruby-dbi不包括准备语句时,DBD没有提供它的仿真器。你可以使用它如下:

require 'dbi' 
st = DBI::SQL::PreparedStatement.new(nil, "Select * from table where x = ?") 
st.bind(['test']) # => "Select * from table where x = test" 

你可以看到它使用的算法here

编辑:根据下评论,DBI 0.2.2版本

require 'dbi' 
class Quoter ; include DBI::SQL::BasicQuote ; end 
st = DBI::SQL::PreparedStatement.new(Quoter.new, "Select * from table where x = ?") 
st.bind(['test']) # => "Select * from table where x = 'test'" 

相关的源文件为here

+0

上面的代码产生错误。似乎需要一个报价类。 - > NoMethodError:未定义方法'quote'为零:NilClass from C:/Ruby/lib/ruby/site_ruby/1.8/dbi/sql.rb:198:in'bind' from C:/ Ruby/LIB /红宝石/ site_ruby/1.8/DBI/sql.rb:197:在'每个 '选自C :/Ruby/lib/ruby/site_ruby/1.8/dbi/sql.rb:197:在'绑定' 从( IRB):15个 – sutch

+0

工程等中的Ruby 1.9.1/DBI 0.4.3一个魅力。你有什么版本的dbi/ruby​​?我们可能可以找到该版本的相应代码。 – anshul

+0

我使用Ruby 1.8.6/dbi 0.2.2。 – sutch