Я пытаюсь использовать подготовленные операторы для вставки значений, заданных в массиве

#express #mariadb

#экспресс #mariadb

Вопрос:

Я пытаюсь ВСТАВИТЬ значения, заданные в массиве, в мою таблицу, где каждый элемент массива является столбцом в таблице. Имейте в виду, что это для API, поэтому данные принимаются через запросы. Вот соответствующие части в моем коде: user.model.js:

 User.create = function (newUser, result) {
console.log(Object.values(newUser));
dbConn.query("INSERT INTO user(user_fname, user_name, user_email, user_phone, user_is_admin) set ?", Object.values(newUser), function (err, res) {
    if (err) {
        console.log("error: ", err);
        result(err, null);
    } else {
        console.log(res.insertId);
        result(null, res.insertId);
    }
});};
  

user.controller.js:

 exports.create = function (req, res) {
const new_user = new User(req.body);
console.log(req.body);

if (req.body.constructor === Object amp;amp; Object.keys(req.body).length === 0) {
    res.status(400).send({
        error: true,
        message: 'Please provide all required field'
    });
} else {
    console.log(new_user);
    User.create(new_user, function (err, user) {
        if (err) {
            res.send(err);
        }
        res.json({
            error: false,
            message: "User added successfully!",
            data: user
        });
    });
}};
  

В этом последнем фрагменте кода приведен вывод console.logs:

 {
  user_fname: 'toto',
  user_name: 'titi',
  user_email: 'who@where.how',
  user_phone: '1010101010',
  user_is_admin: 'false'
}
User {
  fname: 'toto',
  name: 'titi',
  email: 'who@where.how',
  phone: '1010101010',
  is_admin: 'false'
}
[ 'toto', 'titi', 'who@where.how', '1010101010', 'false' ]
  

И последнее, но не менее важное: вот сообщение об ошибке, которое я получаю:

ошибка: SqlError: (conn = 357, no: 1064, SQLState: 42000) У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с «set»toto» в строке 1 sql: ВСТАВИТЬ В user (user_fname, user_name, user_email, user_phone, user_is_admin) set ? — параметры:[‘toto’,’titi’,’who @where.как’,’1010101010′,’false’]

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

Ответ №1:

Нашел ответ! Итак, поскольку я думал, что мой синтаксис был неправильным, вот правильный способ сделать это:

 User.create = function (newUser, result) {
    console.log(Object.values(newUser));
    dbConn.query("INSERT INTO user(user_fname, user_name, user_email, user_phone, user_is_admin) values(? , ? , ? , ? , ?)", Object.values(newUser), function (err, res) {
        if (err) {
            console.log("error: ", err);
            result(err, null);
        } else {
            console.log(res.insertId);
            result(null, res.insertId);
        }
    });
};