エラーコード辞典
🚨 mysql-1054 MySQL Error #1054: Unknown column
クエリで指定したカラム名がテーブルに存在しない
原因
`SELECT name FROM users` のように、`users` テーブルに `name` カラムがない場合に発生します。スペルミス・エイリアス指定漏れが典型的な原因です。MySQL は厳密にカラム名一致を要求するため、 大文字小文字の違いや 全角・半角の混入でも発生します。
なぜ起きるか (内部仕組み)
MySQL は SELECT 句の評価前に「指定されたカラムが対象テーブルに存在するか」を構文解析時に検証します。 存在しない場合は実行に進む前に 1054 でエラー終了するため、 ロジックの問題ではなく「名前そのものが解決できない」 ことを示します。 JOIN や副問い合わせでは、 どのテーブルに属するかを `users.name` のように qualify しないと曖昧で 1054 が出ることがあります。
よくあるシナリオ
1. 列名のタイポ (例: `usrename` ← e と r の入れ替え)。 2. 大文字小文字の混在 (MySQL Linux 環境では `User` と `user` は別物)。 3. JOIN で `users.name` と書くべき所を `name` だけにして、 別テーブルの同名カラムと衝突解決できない。 4. ALTER TABLE でカラムを RENAME した直後、 古いカラム名が残っているコードから参照されている。 5. 別環境 (= dev/staging/prod) でスキーマがずれている。
対処方法
`SHOW COLUMNS FROM users;` で実際のカラム名を確認し、SQL を修正します。`SELECT username FROM users` のように正しい名前を指定してください。JOIN を含む場合は `SELECT u.name FROM users u JOIN profiles p ON ...` のようにテーブル別名を付けると名前空間が明確になります。
再発防止 / 予防策
PDO の prepared statement + 静的解析ツール (PHPStan の DB プラグイン等) でカラム名をスキーマと突き合わせるとビルド時に検出できます。 ORM (= Doctrine / Eloquent) を使う場合は migration とエンティティの同期を CI で検証する仕組みを入れると同型バグが減ります。