я пытаюсь получить доступ к базе данных mysql и nodejs. Во время обучения я столкнулся с синтаксической ошибкой в скрипте, и я понятия не имею, как исправить синтаксис.
var express = require('express');
var router = express.Router();
var db=require('../database');
router.get('/form', function(req, res, next) {
res.render('users');
});
router.post('/create', function(req, res, next) {
// store all the user input data
const userDetails=req.body;
// insert user data into users table
var sql = 'INSERT INTO users SET ?';
db.query(sql, userDetails,function (err, data) {
if (err) throw err;
console.info("User dat is inserted successfully ");
});
res.redirect('/users/form'); // redirect to user form page after inserting the data
});
module.exports = router;
вот ошибка:
code: 'ER_PARSE_ERROR',
errno: 1064,
sqlMessage: "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 '?' at line 1",
sqlState: '42000',
index: 0,
sql: 'INSERT INTO users SET ?'
для справки: я узнал этот код от связь
вы не можете передавать данные типа {field1: 1, field2: 2, field3: 3}. передайте это «ВСТАВИТЬ В пользователей SET field1 = ?, field2 = ?»;
const userDetails=[
1, // this value is field1
2, // this value is field2
];
// insert user data into users table
var sql = 'INSERT INTO users SET field1 = ?, field2 = ?';
db.query(sql, userDetails,function (err, data) {
if (err) throw err;
console.info("User dat is inserted successfully ");
});
Я не уверен, какова конкретная реализация функции db.query
, но вы, вероятно, хотите что-то вроде этого (я получил схему db из вашего другого комментария):
let sql = 'INSERT INTO users SET id=?, fullName=?, emailAddress=?, city=?, country=?';
db.query(sql, userDetails, function (err, data) {
if (err) {
throw err;
}
console.info("User dat is inserted successfully ");
});
Если это не сработает, попробуйте вместо этого установить переменную SQL:
let sql = 'INSERT INTO users (id, fullName, emailAddress, city, country) VALUES (?, ?, ?, ?, ?)';
Я предполагаю, что переменная userDetails
ссылается на объект следующего типа: { id, fullName, emailAddress, city, country }
.
SQL требует вопросительного знака для каждого столбца при каждой вставке при использовании подготовленных операторов. Функция db.query
может пытаться вставить объект непосредственно в виде строки, что может вызвать проблему, поскольку ваша схема имеет 5 столбцов. Синтаксис JSON объекта stringified
также может вызвать жалобу анализатора SQL.
Если это не сработает, я хотел бы посмотреть на вашу схему. Ваша функция, кажется, отправляет объект req.body
напрямую в базу данных, что означает, что пользователь отправляет идентификатор непосредственно в базу данных. Это довольно редко, обычно идентификатор строки генерируется сервером или столбцом автоинкремента в базе данных.
Я надеюсь, что это сработает для вас, не стесняйтесь отвечать, если у вас есть какие-либо вопросы или проблемы.
Спасибо за ответ @Amadan, так что в моем случае у меня есть 5 столбцов в таблице пользователей. Как мне написать синтаксис? столбец состоит из идентификатора, полного имени, адреса электронной почты, города и страны.