mysql2 - Node.js

mysql2 とは

データベースを操作するためのパッケージ

インストール

npm install mysql2

基本的な使い方

const mysql = require('mysql2');

const mysql_conf = {
    host : 'localhost',
    user : 'root',
    password : 'password',
    database: 'sample'
};

const connection = mysql.createConnection(mysql_conf);

connection.query('SELECT * FROM users', function(err, results, fields){
    console.log(results);
});

connection.end();

複数のカラムをオブジェクトで指定する

const mysql = require('mysql2');

const mysql_conf = {
    host : 'localhost',
    user : 'root',
    password : 'password',
    database: 'sample'
};

let data = {name:"Taro", age:20};

const connection = mysql.createConnection(mysql_conf);

connection.query('UPDATE users SET ? WHERE id = 1', [data],  function(err, results, fields){
    console.log(results);
});

connection.end();

フィールド名にもプレイスホルダーを使う

execute では利用できません。

const mysql = require('mysql2');

const mysql_conf = {
    host : 'localhost',
    user : 'root',
    password : 'password',
    database: 'sample'
};

const connection = mysql.createConnection(mysql_conf);

connection.query('SELECT ?? FROM ?? WHERE id = ?', ['name', 'users', 1], (err, result) =>  {
  console.log(result)
});
connection.end();

挿入したレコードのIDを取得する

複数挿入した場合は一番最後の ID が返ります。

const mysql = require('mysql2');

const mysql_conf = {
    host : 'localhost',
    user : 'root',
    password : 'password',
    database: 'sample'
};

const connection = mysql.createConnection(mysql_conf);

connection.execute("INSERT INTO users SET name = ? , age = ?", ["太郎", 35], (err, result) =>  {
  console.log("insert id :" + result["insertId"])
});
connection.end();

複数のクエリを実行する

複数のクエリを実行するには、オプションに「 multipleStatements: true 」を設定します。

multipleStatements オプションは、execute() では利用できません。

const mysql = require('mysql2');

const mysql_conf = {
    host : 'localhost',
    user : 'root',
    password : 'password',
    database: 'sample',
    multipleStatements: true
};

const connection = mysql.createConnection(mysql_conf);

connection.query('SELECT * FROM users;SELECT * FROM fruits', function(err, results, fields){
    console.log(results);
});

connection.end();
[
  [ { id: 1, name: 'Taro', age: 28 }, { id: 2, name: '花子', age: 18 } ],
  [ { id: 1, name: 'りんご', price: 100 } ]
]

プリペアドステートメントを使う

プリペアドステートメントは、SQL 文を予め解析しておいて、後は変数をセットするだけで実行出来るようにしておくテンプレートのようなものです。

プレースホルダを使って指定しておけば、その部分はあくまで「値」として処理され、万が一不正な値が入力されてもエスケープ処理されます。

mysql2 では、execute() を使うことで自動的に prepared statement になります。

const mysql = require('mysql2');

const mysql_conf = {
    host : 'localhost',
    user : 'root',
    password : 'password',
    database: 'sample'
};

const connection = mysql.createConnection(mysql_conf);

connection.execute('SELECT * FROM users WHERE name = ? AND age = ?', ["Taro", 28], function(err, results, fields){
    console.log(results);
});

connection.end();