pg:exec_params没有替换参数?

时间:2014-09-15 00:13:15

标签: ruby pg

首次使用pg gem访问postgres数据库。我已成功连接并可以使用#exec运行查询,但现在使用#exec_params构建简单查询似乎不会替换参数。即:

get '/databases/:db/tables/:table' do |db_name, table_name|
  conn = connect(db_name)
  query_result = conn.exec_params("SELECT * FROM $1;", [table_name])
end

结果为#<PG::SyntaxError: ERROR: syntax error at or near "$1" LINE 1: SELECT * FROM $1; ^ >

这似乎是一个如此简单的例子 - 我从根本上误解了如何使用这种方法?

1 个答案:

答案 0 :(得分:8)

您可以使用的占位符,而不是标识符(例如表名和列名)。这是您使用字符串插值来构建SQL的地方。当然,如果您正在为SQL使用字符串争论,那么必须确保正确引用/转义内容;对于标识符,这意味着使用quote_ident

  

+ (Object) quote_ident(str)

     

返回一个可安全包含在SQL查询中作为标识符的字符串。注意:这不是值的引用函数,而是标识符。

所以你要这样说:

table_name   = conn.quote_ident(table_name)
query_result = conn.exec("SELECT * FROM #{table_name}")