INSERT INTO с ошибкой node -mysql

Я пытаюсь вставить некоторые данные с помощью node.js. Я написал следующий код и установил поддержку MySQL через npm, но мне не удалось 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, для правильного синтаксиса, который будет использоваться рядом с.'username '=' Test ',' password '=' test 'в строке 1

В чем моя ошибка?

Ответы

Ответ 1

Обратите внимание на документацию 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'

Обратите внимание, что вместо VALUES они используют SET. INSERT INTO ... SET x = y - допустимый запрос MySQL, а INSERT INTO ... VALUES x = y - нет.

Ответ 2

Я знаю, что это старый пост, но я думал, что я поделюсь этим INSERT INTO... VALUES - это допустимая команда (нет SET) и очень полезна для массовых обновлений:

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

где [values] - массив массивов, каждый массив содержит эти три поля и вставлен как запись в таблицу.

Ответ 3

Для других пользователей, у меня была эта же проблема, но оказалось, что это более сложная, не связанная с этим проблема. Я не объявлял 'use strict'; в самой верхней части документа.

Я знаю, что это само по себе не решит проблему с вставкой базы данных, но указало на части моего всего script, которые были неправильно закодированы, и после их исправления он работал как ожидалось.