2010-03-16 4 views
2

Ruby를 사용하여 MySQL 데이터베이스 용 SQL 문을 만들어야합니다. Ruby는 데이터베이스에 절대 연결하지 않습니다. SQL 문은 다른 사이트로 보내지고 MySQL 데이터베이스에 대해 실행됩니다.Ruby DBI를 사용하여 핸들없이 준비 하시겠습니까?

Ruby를 실행하는 시스템에 데이터베이스가 연결되어 있지 않기 때문에 DBI의 prepare 문을 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 'for nil : NilClass C : /Ruby/lib/ruby/site_ruby/1.8/dbi/sql.rb : 198 : bind에서 : C :/Ruby/lib/ruby ​​/ site_ruby/1.8/dbi/sql.rb : 197 :'each '에서 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

관련 문제