Ruby PG conn.exec_params SQL 结构
Ruby PG conn.exec_params SQL structure
我在通过 PG 的简单语句中遇到错误:
require 'pg'
conn = PG.connect( dbname: 'myDB' )
@res = conn.exec_params( 'SELECT count(id) FROM users WHERE username = 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 = AND status = "active"
^
"active" 是字段值,不是列。
我的问题:我已通过输入值 "active" 作为另一个占位符来解决此问题。是否不允许在 SQL 中引用值?我认为 SQL 的引用方面会很好。
SQL 中的字符串文字使用单引号,双引号用于标识符(例如 table 和列名)。所以,当你提到 "active"
时,数据库会抱怨没有这样的列。
解决方法是使用占位符:
@res = conn.exec_params(
%q{SELECT count(id) FROM users WHERE username = AND status = },
['johnny5', 'active']
)
或在 SQL:
中使用单引号
@res = conn.exec_params(
%q{SELECT count(id) FROM users WHERE username = AND status = 'active'},
['johnny5']
)
将 SQL 字符串文字从 '...'
切换到 %q{...}
会使内部引用问题更容易处理。
我在通过 PG 的简单语句中遇到错误:
require 'pg'
conn = PG.connect( dbname: 'myDB' )
@res = conn.exec_params( 'SELECT count(id) FROM users WHERE username = 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 = AND status = "active"
^
"active" 是字段值,不是列。
我的问题:我已通过输入值 "active" 作为另一个占位符来解决此问题。是否不允许在 SQL 中引用值?我认为 SQL 的引用方面会很好。
SQL 中的字符串文字使用单引号,双引号用于标识符(例如 table 和列名)。所以,当你提到 "active"
时,数据库会抱怨没有这样的列。
解决方法是使用占位符:
@res = conn.exec_params(
%q{SELECT count(id) FROM users WHERE username = AND status = },
['johnny5', 'active']
)
或在 SQL:
中使用单引号@res = conn.exec_params(
%q{SELECT count(id) FROM users WHERE username = AND status = 'active'},
['johnny5']
)
将 SQL 字符串文字从 '...'
切换到 %q{...}
会使内部引用问题更容易处理。