クマのブログ

つまづいたところ、学びを書いていきます

#1054 - 列 ' ' は 'where clause' にはありません。(Unknown column ‘ ’ in ‘where clause’)

前提

  • Windows

  • Laravel : 6.0

  • MySQL : 5.7

  • 実務で使用予定のLaravelをUdemyで学習中につまずく

状況

以下テーブルとカラムがある中で、SQLで'your_name'カラムに「加藤」という文字が入ったデータを取り出す処理をしたいため

SQL

SELECT * FROM `contact_forms` WHERE `your_name` LIKE `%加藤%`

を実行

↓テーブルとカラム f:id:kuma_kuma0121:20210411211157j:plain

狙い:'your_name'に「加藤」を含むデータのみ取得

困ったこと

上記SQLの結果、以下エラーが発生 f:id:kuma_kuma0121:20210411211333p:plain

#1054 - 列 '%加藤%' は 'where clause' にはありません。

やったこと①

まずはエラー文を理解する

対策

そもそも「列 '%加藤%' は」とあるが、'%加藤%' は値であり、列(カラム)ではない。

ということから、'%加藤%'が列である、というSQL文を書いてしまっていることに気づく

やったこと②

クオーテーションの使い方を注視

今回のエラーコード#1054が発生した際に気を付けるべきことは、以下によると「クオーテーションの使い方」が一つの原因であることが判明

MySQLでよく見かけるエラーの発生原因と対策方法 | サービス | プロエンジニア

実際、エラーを吐いたSQL文ではテーブルもカラムもデータ(値)も全て``(バッククオーテーション)で囲っていた。

そこで、MySQLでの' '(シングルクオーテーション)と `` (バッククオーテーション)の使い分けを以下記事で確認したところ、以下のように使い分けるらしい。

・バッククオートはテーブル名やフィールド名

・シングルクオートは値や文字列

MYSQL バッククオートについて - Qiita

対策

%加藤%(バッククオーテーション)を'%加藤%'(シングルクオーテーション)に変更

結果

無事「加藤」を含むデータのみが取得できた

補足

本エラーについてツイートしたところ、「MySQLでは``(バッククオーテーション)使う必要ない」との指摘があった。

確かにテーブルもカラムも全て' '(シングルクオーテーション)で囲っても問題なく処理が実行された。

f:id:kuma_kuma0121:20210411213733j:plain

備考

何気なく使っていた' '(シングルクオーテーション)と``(バッククオーテーション)の意味を理解することができた。