2010-12-01 7 views
1

私は、MySQLではなく、PostgresのPGError:ERROR:またはその近く構文エラーE'String」

: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] 

に働くのRuby on Railsの条件を持っているエラー生成:

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

Iをそれは最後の比較なしで動作することを知っている。例えば。

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

dddは文字列ですが、a、b、cはすべて10進数です。

Postgresqlについていくつかの調査をしたところ、E 'Stringsはエスケープ文字列になっているようですが、これは修正できないようです。私は非常に頻繁にPostgresqlで動作しないので、それは明らかなことは事前にお詫びします。

私はherokuをホスティングに使用しているので、PostgreSQLの設定を変更することはできません。とにかく、問題の内容と解決方法を本当に理解したいと思っています。

乾杯、 ステュー

答えて

3

ddd = ? 
+0

これは、馬鹿のように感じることについて話す - 歓声。 – Stu

2

ddd is ? 

を変更してみてください私はISオペレータはテキスト値を比較するために使用することはできないと考えています。あなたの意図は何でしたか?

+0

私はそれが読みやすく、MySQLで動作するので、 'is'を使用していますが、=演算子は簡単に使うことができます。私はそれを試してみましょう - チップのための歓声。 – Stu

+0

あなたの状況ではMySQLでは動作しません。文字列演算子ではなくブール演算子です:http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#operator_isバグですあなたのコードで。 –

+0

Hmmm、あなたはそれが開発DBとしてsqlite3だったのです。 – Stu

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] 
関連する問題