ruby – pg:exec_params没有替换参数?

第一次使用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:错误:语法错误在“$1”或附近第1行:SELECT * FROM $1; ^>

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

解决方法

您可以使用占位符作为值,而不是标识符(例如表名和列名).这是您使用字符串插值来构建SQL的地方.当然,如果你正在为你的SQL使用字符串争论,你必须确保正确引用/逃避事情;对于标识符,这意味着使用 quote_ident

+ (Object) quote_ident(str)

Returns a string that is safe for inclusion in a SQL query as an identifier. Note: this is not a quote function for values,but for identifiers.

所以你会说:

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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...