NodeJS Вставить несколько строк

0

На данный момент у меня есть 2 вопроса. Во-первых, я хотел бы знать, как вставлять другие данные в таблицу ma по одному запросу,

app.post('/api/domain/:id/translation.json', function (req, res) {
var domain_id = req.params.id;

 ADD this// Insert INTO translation_to_lang ('lang_id' which mean  result.insertID, 'value') VALUES ("' + req.body.lang_id + '", "' + req.body.value + '");

connection.query("INSERT INTO translation ('key', 'domain_id') VALUES ('" + req.body.key + "', '" + domain_id +"');", function(error, result) {
 if (error) throw(error);
 var domain_id = result[0];

 if (domain_id !== undefined) {
   setTimeout(function () {
     res.status(400);
     res.send({
         code: 400,
         message: 'Bad Request'
     });
   }, 1000);
 }
 console.log(result);

 connection.query('SELECT * FROM translation WHERE id = "' + result.insertId + '"', function(error, data_insert) {
   setTimeout(function () {
     res.send({
         code: 201,
         message: 'success',
         datas: data_insert
     });
   }, 1000);
 });
});
});

И у меня есть ошибка, когда я пытаюсь отправить данные из domain_id, который не существует, если попробовать выполнить условие, например '/api/domain/44/translation.json', в моем bdd в домене нет 44 идентификатора строка Я просто хотел бы, чем мой api res отправить статус 400 плохой запрос, но мое условие не работает, и у меня есть это сообщение об ошибке:

ER_NO_REFERENCED_ROW_2: невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа завершается с ошибкой (restapi. translation, CONSTRAINT translation_ibfk_1 FOREIGN KEY (domain_id) domain_id ЛИТЕРАТУРЫ domain (id))

Это только от поста, чем есть проблема, но если вы хотите, чтобы все сказали мне.

  • 0
    Я бы посоветовал вам не формировать запросы, как вы делаете, например, объединяя строки, это склонно к атакам SQL-инъекций, вы должны использовать параметры.
Теги:

1 ответ

0
Лучший ответ

инструкция insert не работает, потому что этот внешний ключ должен существовать в связанной таблице, что вызывает ошибку.

Таким образом, ваш чек на результат [0] не имеет значения. Вам нужно проверить свою ошибку. И, как упоминалось в комментариях, вы можете также рассмотреть mysql.format для SQL Injection, например

var query = mysql.format("SELECT * FROM translation WHERE id = ?;", tId);

попробуйте использовать свой код, например

app.post('/api/domain/:id/translation.json', function(req, res) {
var insertQuery = mysql.format("INSERT INTO translation ('key', 'domain_id') VALUES (?,?);", [req.body.key, domain_id]);
connection.query(insertQuery, function(error, result) {
    if (error) {
        // check for constraint error

        return res.status(400).send({
            code: 400,
            message: 'Bad Request'
        });
    }

    console.log(result);
    var selectQuery = mysql.format("SELECT * FROM translation WHERE id = ?;", result[0].insertId);
    connection.query(selectQuery, function(error, data_insert) {

        return res.send({
            code: 201,
            message: 'success',
            datas: data_insert
        });

    });
});});
  • 0
    но теперь я получил эту ошибку. TypeError: Невозможно прочитать свойство 'insertId' с неопределенным значением EDIT: Solved. Спасибо, это именно то, что я хочу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню