Запрос ВСТАВКИ MySQL: неизвестный столбец «неопределенный» в «списке полей»

#javascript #html #mysql #node.js #express

#javascript #HTML #mysql #node.js #выразить

Вопрос:

id и cost являются целыми числами и не могут быть нулевыми.

Я получаю эту ошибку:

‘Ошибка: ER_BAD_FIELD_ERROR: неизвестный столбец ‘неопределенный’ в ‘списке полей»

 var sql = "INSERT INTO Paintings(`painting_id`,`painting_title`,`img`,`cost`) VALUES(" id ",'" title "','" img "'," cost ")";
  

Это моя html-форма

 <form action="/post" method="POST">
                    <div class="form-group">
                         <label>Painting id </label>
                         <input type="text" name="painting_id" id="painting_id" >
                    
                    </div>
                    <div class="form-group">
                         <label>Painting Title</label>
                         <input type="text" name="painting_title" id="painting_title" >
                    </div>
                    <div class="form-group">
                         <label>Image </label>
                         <input type="src" name="img" id="img">
                    </div>
                     <div class="form-group">
                         <label>Cost </label>
                         <input type="text" name="cost" id="cost">
                    </div>
                    <br/>
               <input type="submit" value="create painting"/>
</form>
       
  

Это мой код на стороне сервера

 const express = require("express");
const app = express();
const bodyParser = require("body-parser");
var mysql = require('mysql');
var session = require("express-session");


app.use(express.static(__dirname   '/public'));
app.set("view engine", "ejs");
var urlencodedParser= bodyParser.urlencoded({extended: false});
app.use(express.json());


//======SQL CONNECTION========

var connection = mysql.createConnection({
    host: 'localhost',
    user: 'admin',
    password: 'admin',
    database: 'artdb'
});

connection.connect(function(err){
    if(err){
        throw(err);
    }
    console.log("Connected to database");
})


app.get('/admin/painting',function(req,res){
        
        connection.query(`select * from Paintings`,(err,result,fields)=>{
            
            if(err){
                return console.log(err);
            }
            res.render("painting",{page_title:"Customers - Node.js",userData: result});
        });
        
    });

app.get('/painting/add', function(req,res,next){
    res.render('add_painting');

})

app.post('/post', function (req,res,next){

    var id= req.body.painting_id;
    var title = req.body.painting_title;
    var img = req.body.img;
    var cost = req.body.cost;
    var sql = "INSERT INTO Paintings(`painting_id`,`painting_title`,`img`,`cost`) VALUES(" id ",'" title "','" img "'," cost ")";
    connection.query(sql,function(err,result){
        if(err) throw(err);
        console.log("Data Inserted");
        res.redirect('/admin/painting');
    });
});

app.listen(1100, ()=> {
    console.log("Server is running");
})
  

Комментарии:

1. id должно быть undefined тогда, поскольку это то, что указывает ошибка

2. Является ли столбец painting_id автоинкрементным?

3. нет, ПЕРВИЧНЫЙ КЛЮЧ painting_id INT

4. @JaromandaX Я определил идентификатор как: var id= req.body.painting_id;

5. в этом случае req.body.painting_id не определено

Ответ №1:

Вам необходимо использовать анализатор тела urlencoded в вашем экспресс-приложении

 app.use(bodyParser.urlencoded({ extended: false }))
  

просто объявляю

 var urlencodedParser= bodyParser.urlencoded({extended: false});
  

на самом деле он не применяется к вашему приложению