#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);
});
});
こうすればしっかり動くことが確認できたと思います。
##終わり
ついさっき自分も知ったばかりなので共有したいと思います。
ではでは〜〜^^