2010-03-16 72 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