Ruby PG conn.exec_参数SQL结构
通过PG,我在一个简单语句中发现一个错误:Ruby PG conn.exec_参数SQL结构,sql,ruby,connection,pg,Sql,Ruby,Connection,Pg,通过PG,我在一个简单语句中发现一个错误: require 'pg' conn = PG.connect( dbname: 'myDB' ) @res = conn.exec_params( 'SELECT count(id) FROM users WHERE username = $1 AND status = "active"', ['johnny5'] ) 错误: /Users/rich/app.rb:14:in `exec_params': ERROR: column "active
require 'pg'
conn = PG.connect( dbname: 'myDB' )
@res = conn.exec_params( 'SELECT count(id) FROM users WHERE username = $1 AND status = "active"', ['johnny5'] )
错误:
/Users/rich/app.rb:14:in `exec_params': ERROR: column "active" does not exist (PG::UndefinedColumn)
LINE 1: ...unt(id) FROM users WHERE username = $1 AND status = "active"
^
“活动”是字段值,而不是列
我的问题:我已经通过输入值“active”作为另一个占位符修复了这个问题。SQL中是否不允许引用值?我认为引用SQL的某些方面是可以的 SQL中的字符串文字使用单引号,双引号表示标识符(如表名和列名)。因此,当您提到
“active”
时,数据库会抱怨没有这样的列
解决方案是使用占位符:
@res = conn.exec_params(
%q{SELECT count(id) FROM users WHERE username = $1 AND status = $2},
['johnny5', 'active']
)
或者在SQL中使用单引号:
@res = conn.exec_params(
%q{SELECT count(id) FROM users WHERE username = $1 AND status = 'active'},
['johnny5']
)
将SQL字符串文本从“…”
切换到%q{…}
,使内部引用问题更容易处理