web-dev-qa-db-ja.com

node-mysqlでINSERT INTOが失敗する

Node.jsでデータを挿入しようとしています。次のコードを記述し、npm経由でMySQLサポートをインストールしましたが、INSERT INTO テーブル。

ここに私のコードがあります:

var mysql = require('mysql');

function BD() {
    var connection = mysql.createConnection({
        user: 'root',
        password: '',
        Host: 'localhost',
        port: 3306,
        database: 'nodejs'
    });
    return connection;
}

app.post("/user/create", function(req, res) {
    var objBD = BD();

    var post = {
        username: req.body.username,
        password: req.body.password
    };

    objBD.query('INSERT INTO users VALUES ?', post, function(error) {
        if (error) {
            console.log(error.message);
        } else {
            console.log('success');    
        }
    });
});

HTMLコード:

<form action="/user/create" method="POST" class="form-horizontal">
     <input type="text" id="username_input" name="username">
     <input type="text" id="password_input" name="password">
     <input type="submit" name="Submit" value="Insert" class="btn">
</form>

エラーメッセージは次のとおりです。

SQL構文にエラーがあります。使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

私の間違いは何ですか?

19
rokirakan78

node-mysqlのドキュメント に注意してください:

注意を払った場合、このエスケープにより次のようなきちんとしたことができることに気づいたかもしれません。

var post  = {id: 1, title: 'Hello MySQL'};
var query = connection.query('INSERT INTO posts SET ?', post, function(err, result) {
  // Neat!
});
console.log(query.sql); // INSERT INTO posts SET `id` = 1, `title` = 'Hello MySQL'

SETの代わりにVALUESを使用していることに注意してください。 INSERT INTO ... SET x = yは有効なMySQLクエリですが、INSERT INTO ... VALUES x = yは有効ではありません。

57
TimWolla

私はこれが古い投稿であることを知っていますが、INSERT INTO ... VALUESは有効なコマンド(SETなし)であり、一括更新に非常に役立つことを共有すると思いました:

db.query('INSERT INTO myTable (field1, field2, field3) VALUES ?', [values])

ここで、[値]は配列の配列で、各配列にはこれら3つのフィールドが含まれ、テーブルにレコードとして挿入されます。

12
joeruzz

他の検索者にとっても同じ問題がありましたが、それはより複雑で無関係な問題であったことがわかりました。ドキュメントの最上部で'use strict';を宣言していませんでした。

これだけではデータベース挿入の問題を解決できないことはわかっていますが、スクリプト全体で誤ってコーディングされた部分を指摘し、修正すると期待どおりに機能しました。

0
Branndon