壞主意。不要這樣做,因爲您正在使您的代碼容易受到SQL注入攻擊,並且還會讓您的生活更加艱難。瞭解更多關於編寫SQL語句,SQL注入等
總之,除非你使用的是一些ORM,你應該這樣做:
#!/usr/bin/ruby
require 'pg'
if ARGV.length != 1 then
puts "Usage: prepared_statement.rb rowId"
exit
end
rowId = ARGV[0]
begin
con = PG.connect :dbname => 'testdb', :user => 'janbodnar'
con.prepare 'stm1', "SELECT * FROM Cars WHERE Id=$1"
rs = con.exec_prepared 'stm1', [rowId]
puts rs.values
rescue PG::Error => e
puts e.message
ensure
rs.clear if rs
con.close if con
end
(從一個拍攝http://zetcode.com/db/postgresqlruby/例如)
編輯:您不需要使用準備好的語句,也可以使用提供正確參數綁定的DB庫方法:
require 'pg'
conn = PG::Connection.open(:dbname => 'test')
res = conn.exec_params('SELECT $1 AS a, $2 AS b, $3 AS c', [1, 2, nil])
查看文檔for PG#exec_params
使用Ruby的Postgresql驅動程序傳遞參數。 –