質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

2回答

1316閲覧

Nodejsでawait/asyncを効かせて、プレースホルダーを利用したMYSQLクエリの実行

k.t.est

総合スコア49

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2018/11/08 06:13

Nodejs初心者です。
下記のコードでは、プレースホルダーを利用せずに直接クエリを実行しておりますが、
プレースホルダーを利用して、クエリを実行したいと考えております。
どのように行えば実行できますでしょうか?
ご教示下さい。

nodejs

1const mysql = require('mysql'); 2const util = require('util'); 3 4 5// 取得 6async function findRecord(id) { 7 var pool = mysql.createPool({ 8 host: ' *** ', 9 user: ' *** ', 10 password: '***', 11 database: ' *** ', 12 }) 13 pool.query = util.promisify(pool.query) 14 try { 15 var records = await pool.query('SELECT * FROM xxxx WHERE id = ' + id); 16 pool.end(); 17 return records[0]; 18 } catch (err) { 19 throw new Error(err) 20 } 21} 22 23 24(async () => { 25 const record = await findRecord(id); 26 console.log(record); 27})();

###環境
nodejs : v8.12.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

npmのmysqlモジュールは古いので、mysql2モジュールを使用してください。

プレースホルダーを利用して、クエリを実行したいと考えております。

ドキュメントを読みましょう。

これだけだと不親切なのでヒントを出しておきます。
第一引数のクエリ文字列に?を入れて、第二引数に配列の形式で入れていくと、
配列の0番目の要素が1個目の?にあてがわれるという塩梅です。

これを元にUsing Promise Wrapper - mysql2のサンプルコードにそのまんまなサンプルが載っているので、
Google翻訳等を駆使しながら読んでみてください。

こういうプレースホルダー部分で詰まると思うのがWHERE x IN (?, ?)みたいになる箇所の実装です。
mysqlにはformatというメソッドが存在し、プレースホルダーを活用した際の発行SQL予定文字列を確認出来る
Escaping query values - mysqlの下の方にtoSqlStringで欲しければformat使いましょう的な説明とサンプルが載っています。

因みにmysql1とmysql2は利用可能なメソッドや機能自体は瓜二つといえるほどに同じモノです。
mysql2はパフォーマンス向上、Promiseに対応等の部分で多少便利です。
両方のドキュメントを見てくださいね。

投稿2018/11/08 06:42

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k.t.est

2018/11/08 06:44

有難う御座います!今後はmysql2を使います
guest

0

自己解決

これでできそうです。

###変更前

nodejs

1var records = await pool.query('SELECT * FROM xxxx WHERE id = ' + id);

###変更後

nodejs

1var records = await pool.query('SELECT * FROM xxxx WHERE id = ?',[id]);

投稿2018/11/08 06:32

k.t.est

総合スコア49

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問