LoginSignup
0
0

More than 1 year has passed since last update.

MySQLで"Unknown column 'xxx' in 'where clause'"が出たときの対処法

Posted at

MysqlでSELECTを使うときの注意点

対象者

  • これからSQLを学ぶ方
  • 少し触ったことのある程度の方

今回の気づき

例えばmysqlを使用してデータを抽出したいと考えます。

SELECT * FROM users WHERE id=xxx

その際、このようなSQL文を組み立てるとは思うのですが、idの部分に入ってくるものは変数で管理したいですよね??

そしたら変数で管理してみましょう!
諸事情により、環境はNodeでExpressを使用します。随時自分が学習してる言語で応用してみてください!

node.js
const express = require('express');
const app = express();

app.listen(3000, () => console.log('Server is listening on 3000');
//このとき入ってくるindexは"a6f87ff4d4a04fa7a7a77acc1e3a6bd1"と定義します。
app.get('/users/:index', (req, res) => {
  const _id = req.params.index;
  const sql = `SELECT * FROM users WHERE id=${_id}`;
  mysql.query(sql, (err, result) => {
    if (err) throw err;
    res.send(result);
  });
});

一見これで完璧に見えませんか??見えますよね??

でも実際に動かしてみると、

node.js
code: 'ER_BAD_FIELD_ERROR',
  errno: 1054,
  sqlMessage: "Unknown column 'a6f87ff4d4a04fa7a7a77acc1e3a6bd1' in 'where clause'",
  sqlState: '42S22',
  index: 0,
  sql: 'SELECT * FROM articles WHERE id=a6f87ff4d4a04fa7a7a77acc1e3a6bd1'

うわああ、エラーですねえ。。。。

解決策

どうやらidの部分を''で囲む必要があるみたいです。

なので変更して実際に動かしてみると

node.js
const express = require('express');
const app = express();

app.listen(3000, () => console.log('Server is listening on 3000');
//このとき入ってくるindexは"a6f87ff4d4a04fa7a7a77acc1e3a6bd1"と定義します。
app.get('/users/:index', (req, res) => {
  const _id = req.params.index;
  const sql = `SELECT * FROM users WHERE id='${_id}'`;
  mysql.query(sql, (err, result) => {
    if (err) throw err;
    res.send(result);
  });
});

こうすればしっかり動くことが確認できたと思います。

終わり

ついさっき自分も知ったばかりなので共有したいと思います。

ではでは〜〜^^

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0