@tatsuya1970

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

コードはまったく変更してないのにmysql2のエラーが発生(Ruby on Rails)

環境

Ruby 2.6.6
MySQL5.6.50
mysql2 0.4.10
heroku-20

解決したいこと

2021年4月21日には正常に動作していたプログラムが、以下のエラーを発生します。
コードはまったく変更してないです。

最近、なにか大きな変更があったのでしょうか?
解決方法をご教授願います。

発生している問題・エラー

ActiveRecord::StatementInvalid
 (Mysql2::Error: You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 'get = '1')) ORDER BY point DESC' at line 1: 
SELECT `users`.* FROM `users` WHERE ((line_id = 'XXXXX') AND (get = '1')) ORDER BY point DESC):

該当するソースコード

qiita.rb
list = User.where("(line_id = ?) AND (get = ?)",user_id,"1").order("point DESC")

なお、カラム get は varchar(255)、 DEFAULT NULL です。

自分で試したこと

ダブルクォーテーションをシングルクォーテーションに変えても同じエラーがでます。

qiita.rb
list = User.where('(line_id = ?) AND (get = ?)',user_id,'1').order('point DESC')

どうか、お助けください。
よろしくお願いします !!



0 likes

2Answer

list = User.where({
  line_id: user_id,
  get: 1
}).order("point DESC")

Railsだと普通はこういうふうに書くほうが一般的かと。
あとgetはmysqlの予約語じゃないかと。

1Like

Comments

  1. @tatsuya1970

    Questioner

    ご指導ありがとうございます。
    確かにgetは予約語ですね。
    getにバッククォートをつけたらエラー出ずに通りました。

getはMySQLの予約語です。

selectfromのように構文として意味がある単語なので、構文エラーになっていると思われます。

Ruby on Railsは詳しくないのですが、getをバッククォート「`」で括ることで解決しないでしょうか?

1Like

Comments

  1. @tatsuya1970

    Questioner

    ご指導ありがとうございます。
    確かにgetは予約語ですね。
    getにバッククォートをつけたらエラー出ずに通りました。

Your answer might help someone💌