Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby PG conn.exec_参数SQL结构_Sql_Ruby_Connection_Pg - Fatal编程技术网

Ruby PG conn.exec_参数SQL结构

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

通过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" 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{…}
,使内部引用问题更容易处理