ER_NO_REFERENCED_ROW_2 об использовании LAST_INSERT_ID - PullRequest
0 голосов
/ 30 января 2020

Я новичок в vuejs и express, и мне было интересно, как получить GuestID из таблицы Guest для внешнего ключа GuestID в моей таблице reservations.

app.post('/create',(req,res,next)=>{
    var mysql = require('mysql')
    var connection = mysql.createConnection(config)
    var sql = "INSERT INTO `guest` SET ?"
    connection.query(sql,req.body,(err,results,fields)=>{
        connection.end()
        if(err){
            next(err)
        }else{
            res.json([true,results.insertId])
        }
    })
})


app.post('/book',(req,res,next)=>{
    var mysql = require('mysql')
    var connection = mysql.createConnection(config)
    var sql = "INSERT INTO `reservation` SET `GuestID`=LAST_INSERT_ID(),`RoomID`=?,`AdultCount`=?,`KidCount`=?,`CheckInDate`=?,`CheckOutDate`=?"
    var RoomID = req.body.RoomID;
    var AdultCount = req.body.AdultCount;
    var KidCount = req.body.KidCount;
    var CheckInDate = req.body.CheckInDate;
    var CheckOutDate = req.body.CheckOutDate;
    connection.query(sql,[RoomID,AdultCount,KidCount,CheckInDate,CheckOutDate],(err,results,fields)=>{
        connection.end()
        if(err){
            next(err)
        }else{
            res.json([true,results])
        }
    })
})

Затем я получаю эту ошибку:

Ошибка: ER_NO_REFERENCED_ROW_2: невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (booking. reservation, CONSTRAINT reservation_ibfk_1 ИНОСТРАННЫЙ КЛЮЧ (GuestID) ССЫЛКИ guest (GuestID))

1 Ответ

0 голосов
/ 30 января 2020

Благодаря @Akina я пытался go искать запросы по одному соединению. Я видел сообщение, в котором вы можете поместить несколько операторов в express, используя multipleStatements в соединении, и сделал мой код следующим образом:

app.post('/book',(req,res,next)=>{
    var mysql = require('mysql')
    var connection = mysql.createConnection(config)
    var sql = "INSERT INTO `guest` SET `FirstName`=?,`LastName`=?,`Email`=?,`ContactNumber`=?;SET @GuestID:=LAST_INSERT_ID();INSERT INTO `reservation` SET `GuestID`=@GuestID,`RoomID`=?,`AdultCount`=?,`KidCount`=?,`CheckInDate`=?,`CheckOutDate`=?"
    var FirstName = req.body.FirstName;
    var LastName = req.body.LastName;
    var Email = req.body.Email;
    var ContactNumber = req.body.ContactNumber;
    var RoomID = req.body.RoomID;
    var AdultCount = req.body.AdultCount;
    var KidCount = req.body.KidCount;
    var CheckInDate = req.body.CheckInDate;
    var CheckOutDate = req.body.CheckOutDate;
    connection.query(sql,[FirstName,LastName,Email,ContactNumber,RoomID,AdultCount,KidCount,CheckInDate,CheckOutDate],(err,results,fields)=>{
        connection.end()
        if(err){
            next(err)
        }else{
            res.json([true,results])
        }
    })
})

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

...