第一次使用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; ^ >
这似乎是一个如此简单的例子 - 我从根本上误解了如何使用这种方法?
您可以使用占位符作为值,而不是标识符(例如表名和列名).这是您使用字符串插值来构建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)
| 归档时间: |
|
| 查看次数: |
2101 次 |
| 最近记录: |