中堅プログラマーの備忘録

忘れっぽくなってきたので備忘録として・・・

【node.js + MySQL】プレースホルダでDBを操作する

1.概要

プレースホルダとは

実際の内容を後から挿入するために、とりあえず仮に確保した場所のこと。
だそうです。


私がプレースホルダを使うことで得られる一番メリットは

SQLが非常に見やすくなるので可読性が高いコードになること
だと思っています。


SQLインジェクション対策はおまけですかね

2.準備

MySQLを操作するために今回は【mysql2】というパッケージを使います。
なのでパッケージを追加します。

>npm install mysql2

【mysql2】については下記の記事を参照
www.chuken-engineer.com


3.使用するテーブル

【test_db】というDBに【user】というテーブルを作成しています。

mysql> SHOW COLUMNS FROM user;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| name  | varchar(50) | YES  |     | NULL    |                |
| age   | int         | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

データは空の状態です。

4.スクリプト

スクリプトは下記のようになります。
name:管理者
age:38
を登録しています。

let mysql = require('mysql2/promise');

dbCon = {
  host: 'localhost',
  user: 'testuser',
  password: 'hogehoge',
  database: 'test_db'
};


async function getData(){
    let client;
    let ret = 'NG';
    let rows; 
    let message = '';
	let data = ['管理者', 38]
    try{
        client = await mysql.createConnection(dbCon);
        let db_ret = await client.query("INSERT INTO user (name, age) VALUES (?, ?)", data);
        rows = db_ret[0];
        ret = 'OK'
    }catch(err){
        message = err.message;
    }finally{
        if(client != undefined){
            client.end();
        }
    }
    return {"ret": ret, "rows": rows, "message": message};
};

5.結果

結果は下記のとおりになりました。

mysql> SELECT * FROM user;
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  1 | 管理者 |   38 |
+----+--------+------+
1 row in set (0.00 sec)

しっかり登録できています。



また

let mysql = require('mysql2/promise');

とすることで
コールバックを使用せずに記述できるので可読性も上がっているかと思います。