Trato de poner mi mano en la base de datos mysql y nodejs. Durante el aprendizaje encuentro un error de sintaxis en el script y no tengo idea de cómo corregir la sintaxis.
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.log("User dat is inserted successfully "); }); res.redirect('/users/form'); // redirect to user form page after inserting the data }); module.exports = router;aquí está el error:
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 ?'como referencia: aprendo este código del enlace
No estoy seguro de cuál es la implementación específica de la función db.query , pero probablemente quieras algo como esto (obtuve el esquema db de tu otro comentario):
let sql = 'INSERT INTO users SET id=?, fullName=?, emailAddress=?, city=?, country=?'; db.query(sql, userDetails, function (err, data) { if (err) { throw err; } console.log("User dat is inserted successfully "); });Si eso no funciona, intente configurar la variable SQL en este lugar:
let sql = 'INSERT INTO users (id, fullName, emailAddress, city, country) VALUES (?, ?, ?, ?, ?)'; Supongo que la variable userDetails hace referencia a un objeto con el siguiente tipo: { id, fullName, emailAddress, city, country } .
SQL requiere un signo de interrogación para cada columna en cada inserción cuando se usan declaraciones preparadas. La función db.query podría estar intentando insertar el objeto directamente como una cadena, lo que podría causar un problema porque su esquema tiene 5 columnas. La sintaxis JSON del objeto en forma de stringified también puede hacer que el analizador SQL se queje.
Si eso no funciona, me gustaría mirar su esquema. Su función parece enviar el objeto req.body a la base de datos directamente, lo que significaría que el usuario está enviando la identificación directamente a la base de datos. Esto es bastante poco común, generalmente la identificación de una fila es generada por el servidor o una columna de incremento automático en la base de datos.
Espero que esto funcione para usted, no dude en responder si tiene alguna pregunta o inquietud.
no puede pasar los datos como {campo1: 1, campo2: 2, campo3: 3}. pase esto 'INSERT INTO users 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.log("User dat is inserted successfully "); });