JavaScript - node + express + mysql2 - 変数・プレースホルダ


 クラウディア


1. 概要
2. 変数
5. 参考サイト

1. 概要

 「mysql2」で、変数やら(バインド変数?)を使えるようです。

2. 変数

 参考サイト、ママ書きますが、下記の要領で変数を使うことができるようです。

const main = async () => {
  const [resultRows] = await pool.query(
    "SELECT * FROM users WHERE id = :id",
    {id: 123}
  );
  const user = resultRows[0];
  user.name = "Jiro";
  await pool.query(
    "UPDATE USERS SET :datum WHERE id = :id",
    {datum: user, id: user.id}
  )
}
 「:」で変数をつけてあとで、値を設定しているということですな。

3. プレースホルダ

 「?」をキーワードにして、あとで値を設定することもできるようです。  つまり。

  const [resultRows] = await pool.query(
    "SELECT * FROM users WHERE id = ?",
    [123]
  );
 は、下記と同じ意味になるようです。

  const [resultRows] = await pool.query(
    "SELECT * FROM users WHERE id = :id",
    {id: 123}
  );

4. その他

 その他、これをどういう名称で呼ぶのかよくわかりませんが、下記のようなこともできるようです。  「INSERT」  「SET :datum」という書き方をして、「datum」 キーをオブジェクトにすることで自動的に値を補完してくれる

const sql = `
  INSERT INTO users
  SET :datum
`;
const datum = {
  name: "taro",
  age: 18,
  email: "taro@example.com",
};
await pool.query(sql, {datum});
 「UPDATE」  メールアドレスがプライマリーキーと想定して、下記のような書き方ができる。

const sql = '
  UPDATE users
  SET :datum
  WHERE email = :email
';
const datum = {
  name: "taro",
  age: 18,
  email: "taro@example.com"
};
const {mail} = datum;
await pool.query(sql, {datum, email});

5. 参考サイト

 本ページは、下記のサイトを参考にさせていただきました。
Node.js で mysql2 を扱う時の備忘録 #Node.js

EaseUS
AbemaTV 無料体験