PGError:错误:E'String'或其附近的语法错误

时间:2010-12-01 17:57:30

标签: ruby-on-rails postgresql

我有一个Ruby on Rails条件,适用于MySQL但不适用于PostGres

:conditions => ["A between ? and ? and B between ? and ? and C between ? and ? and ddd is ?",@amin,@amax,@bmin,@bmax,@cmin,@cmax,params[:input].to_s]

生成错误:

ActiveRecord::StatementInvalid (PGError: ERROR:  syntax error at or near "E'word'"
LINE 1: ...c between -100 and 100 and ddd is E'word')

我知道它没有最后的比较。例如

    :conditions => ["A between ? and ? and B between ? and ? and C between ? and ?",@amin,@amax,@bmin,@bmax,@cmin,@cmax]

ddd的类型为:string而a,b和c都是:decimal。

在对Postgresql进行一些研究后,似乎E'字符串是转义字符串 - 这对我没有帮助,因为我似乎无法纠正它。我不经常使用Postgresql,所以如果有明显的事情,我会事先道歉。

我正在使用heroku进行托管,因此我无法更改任何Postgresql设置。无论如何,我更愿意真正理解问题是什么以及如何解决它。

干杯, 斯图

3 个答案:

答案 0 :(得分:3)

尝试更改

ddd is ?

ddd = ?

答案 1 :(得分:2)

我认为IS运算符不能用于比较文本值。你的意图是什么?

答案 2 :(得分:0)

你试过吗?ddd =?而不是?

 :conditions => ["A between ? and ? and B between ? and ? and C between ? and ? and ddd = ?",@amin,@amax,@bmin,@bmax,@cmin,@cmax,params[:input].to_s]