2010-03-16 6 views
2

J'ai besoin d'utiliser Ruby pour créer des instructions SQL pour une base de données MySQL. Ruby ne se connectera jamais à la base de données. Les instructions SQL seront envoyées à un autre site et exécutées sur la base de données MySQL.Utilisant Ruby DBI préparer sans poignée?

Depuis la machine en marche Ruby n'a pas de connexion à la base de données, il est possible d'utiliser la déclaration de préparer DBI sans créer une poignée à la base de données MySQL?

Répondre

2

ruby-dbi ne comprend un émulateur pour la préparation des états lorsque le DBD ne fournit pas. Vous pouvez l'utiliser comme suit:

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

Vous pouvez voir l'algorithme qu'il utilise here.

Edit: Sur la base des commentaires ci-dessous un, DBI 0.2.2 Version

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'" 

fichier source pertinente est here.

+0

Le code ci-dessus produit une erreur. Il semble qu'une classe de citations est nécessaire. -> NoMethodError: méthode non définie 'quote 'pour néant: NilClass de C: /Ruby/lib/ruby/site_ruby/1.8/dbi/sql.rb: 198: dans' bind' from C:/Ruby/lib/ruby ​​/ site_ruby/1,8/DBI/sql.rb: 197: dans 'chaque ' de C: /Ruby/lib/ruby/site_ruby/1.8/dbi/sql.rb: 197: dans' bind' de (irb): 15 – sutch

+0

Fonctionne comme un charme dans Ruby 1.9.1/dbi 0.4.3. Quelle version de dbi/ruby ​​es-tu? Nous pourrions probablement trouver le code correspondant pour cette version. – anshul

+0

J'utilise Ruby 1.8.6/dbi 0.2.2. – sutch