отправка строкового значения в базу данных возвращает ошибку

#javascript #html #node.js #ejs

#javascript #HTML #node.js #ejs

Вопрос:

Я пытаюсь отправить описание продукта со своей панели мониторинга в свою базу данных, однако всякий раз, когда я включаю » или » в описание, оно выдает ошибку The string constant beginning with "' )" does not have an ending string delimiter. SQLSTATE=42603 . Я понимаю, почему это происходит, но мне необходимо, чтобы они были там, так как в описаниях некоторых продуктов должно быть указано, 10" tall , или 1' wide , без изменения формата строки… есть ли способ обойти это?

интерфейс:

  <fieldset>
  <label for="bio">Description:</label>
  <textarea id="bio" name="description" placeholder="Enter product desc..." style="border: 1px solid black" required></textarea>
</fieldset>
<button id="submitButton" type="submit">Submit</button>
 

внутренний код:

 var size = req.query.size;
console.log(size);

var image_url = req.query.url;
//DB2 CONNETCTION FOR ADDING PRODUCTS
var addProducts =
  "insert into PRODUCTS ( ITEM, DESCRIPTION, PRICE, SIZES, IMAGE ) VALUES ('"  
  req.query.item  
  "', '"  
  req.query.description  
  "', '"  
  req.query.price  
  "', '"  
  size  
  "', '"  
  image_url  
  "' )";
ibmdb.open(ibmdbconnDash, function (err, conn) {
  if (err) return console.log(err);
  conn.query(addProducts, function (err, rows) {
    if (err) {
      console.log(err);
    }

    if (err) {
      productAddedValue = false;
    } else {
      productAddedValue = true;
    }
    //RENDERING ADD PRODUCTS PAGE
    res.render("add-products", {
      page_title: "add-products",
      data: rows,
      userName: userName,
      FN: firstName,
      LN: lastName,
      CO: company,
      productAddedValue: productAddedValue,
    });

    conn.close(function () {
      console.log("closed the function /add-products");
    });
  });
});
 

Ответ №1:

Вы должны использовать конструктор запросов или ORM, а не объединять вводимые пользователем данные. Это позволит правильно избежать ввода для предотвращения ошибок и атак SQL-инъекций. Смотрите этот пример из официальных привязок DB2.