pg:exec_params没有替换参数?

Dav*_*ith 6 ruby pg

第一次使用pggem访问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
Run Code Online (Sandbox Code Playgroud)

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

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

mu *_*ort 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}")
Run Code Online (Sandbox Code Playgroud)