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

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

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

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

Node.js

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

Q&A

解決済

2回答

8087閲覧

Node.jsのmysqlパッケージでINSERT INTO文を実行させるとどうしてもシンタックスエラーになる

FUGAMARU-MCPE

総合スコア33

MySQL

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

Node.js

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

0グッド

0クリップ

投稿2017/02/28 07:31

Node.jsからMySQLサーバーにデーターを追加したいのですが、どうしてもシンタックスエラーを吐かれるのでお力をお貸しいただきたい次第です。

まず、HTMLに、

HTML

1<input type="text" name="server-name" id="server-name"/> 2<input type="password" name="password" id="password"/> 3<input type="text" name="mailadress" id="mailadress"/> 4<input type="button" value="登録" class="special" id="register"/> 5 6~省略~ 7<script> 8var socket = io.connect('http://localhost:3000'); 9 10$("#register").on('click', function () { 11 socket.emit('register', { 'id': create_privateid(6), 'name': $("#server-name").val(), 'mailadress': $("#mailadress").val(), 'password': $("#password").val() }); 12}); 13 14function create_privateid( n ){ 15var CODE_TABLE = "123456789"; 16var r = ""; 17 for (var i = 0, k = CODE_TABLE.length; i < n; i++){ 18 r += CODE_TABLE.charAt(Math.floor(k * Math.random())); 19 } 20 return r; 21} 22</script>

というコードが記述されていて、テキストボックスが3つとボタンが1つあって、登録ボタンをクリックしたらテキストボックスに入力されている内容をWebSocketでNode.jsに送って、MySQLサーバーに登録...という内容のものです。

Node.js側では、

JavaScript

1~省略~ 2 3socket.on('register', function(req) { 4 connection.query('INSERT INTO servers(id,name,mailadress,password) VALUES(' + req.id + ',' + req.name + ',' + req.mailadress + ',' + req.password + ');', function (err, rows, fields) { 5 if (err) { console.log('err: ' + err); } 6 }); 7 connection.query('INSERT INTO status(id,state) VALUES(' + req.id + ',0);', function (err, rows, fields) { 8 if (err) { console.log('err: ' + err); } 9 }); 10});

とserversテーブルとstatusテーブルにそれぞれデーターを追加するというコードを書いています。
しかし、例えば、
IDが「server-name」のテキストボックスに「TEST」
IDが「password」のテキストボックスに「12345」
IDが「mailadress」のテキストボックスに「user@example.com
と入力し、登録ボタンを押して登録処理をさせてみると

err: Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@example.com,12345)' at line 1

というシンタックスエラーが返ってきます。
このエラーはserversテーブルに書き込む時に出てくるエラーなので、statusテーブルにはしっかりとデーターが追加されています。なので、環境の問題ではなく構文の問題だと思うのですが、おかしいところが見当たりません。

どのように修正すれば良いかアドバイス頂けないでしょうか。
長文失礼しました。

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

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

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

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

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

guest

回答2

0

turbgraphics200さんの回答がbestと思いますし別件になりますが

SQLインジェクションは怖いですし?を使ったやり方のほうが良いです。
https://www.npmjs.com/package/mysql#escaping-query-values

投稿2017/02/28 07:57

mosapride

総合スコア1480

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

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

0

ベストアンサー

javascript

1var sql = 'INSERT INTO servers(id,name,mailadress,password) VALUES(' + req.id + ',' + req.name + ',' + req.mailadress + ',' + req.password + ');' 2console.log(sql);

'register'の処理の先頭に挿入して、実行しようとしているSQLをコンソールに出力してみれば、どうしてエラーになるのかがわかると思います。

投稿2017/02/28 07:38

turbgraphics200

総合スコア4267

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

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

FUGAMARU-MCPE

2017/02/28 08:26

そこを見落としていました。 次はこのようなことがないようにちゃんと文字列を出力させてみます... ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問