はじめに
Node.jsでExpress+Mysqlを用いてRestApiを作成する際、postでの処理に詰まったため備忘録として記事を書きます。
問題
id(int) | name(String) |
---|---|
1 | test |
このようなテーブルに対して、以下のソースを用いてpostでレコードを挿入する際、数値は入るが文字列はエラーが出て入れることができなかった。
id=req.body.id;
name=req.body.name";
//jsonで{id:2,name:”sample”}というデータを送信
sql="INSERT INTO api_tbl VALUES("+id+","+name+")";
connection.query( sql,function (error, results, fields) {
if (error) throw error;
res.send("ok");
});
原因としては、postリクエストを送った際、sql文をセットしている変数sql
に以下のような文字列が格納されていたからと考えた。
sql="INSERT INTO api_tbl VALUES(2,sample)"
ここからnameの文字列を「""」で囲うために、変数name
の値を以下のように書き換えることで実装できた。
name= '"'+req.body.name+'"'
おわりに
SQL文はあまり学習していないので変なところで詰まってしまった…反省。
基本的な構文はすらすら書けるようしっかり学習します。
今回の手法、もっと簡単にできるやり方があったら教えてください!
(2020/8/2 追記)
@nagtkk さんのコメントで、プレースホルダ(?
)をつかってsql文に値をセットするやり方を教えてもらいました!
実際に試してみたらしっかりと動作し、またソースも見やすく簡単に実装できたためこちらの手法を推奨します。