IwanQ
@IwanQ
Плохие времена часто дают прекрасные возможности

Не работает подготовленный запрос?

Здравствуйте, подскажите пожалуйста, почему не работает подготовленный запрос

const writeData = await getDataDB('INSERT INTO test (ownId, email, ip, category, productId) VALUES (?, ?, ?, ?, ?)', ["1212", "cds@sa.sa", "12.12.12", "test", "1"]);


Ошибка: UnhandledPromiseRejectionWarning: Error: 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

Но при этом если написать значения заранее

const writeData = await getDataDB('INSERT INTO test (ownId, email, ip, category, productId) VALUES ("12324", "as@sa.sa", "12.12", "test", "11")');


Все нормально работает.

P.S. Функция

const getDataDB = (q, p = '')=>{
  return new Promise((resolve,reject)=>{
    pool.query(q, [p], (err,result)=>{
      if(err) reject(err);

      resolve(result);
    });
  });
};


Также если я например делаю так:

const writeData = await getDataDB(`INSERT INTO test (ownId, email, ip, category, productId) VALUES ("123245", ${email}, "12.12", "test", "11")`);


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 '@ss.ss, "12.12", "test", "11")' at line 1
почта была в данном случае ss@ss.ss

Все равно ошибка

Подскажите пожалуйста, почему не работает вариант с плейсхолдерами? Я же вроде-бы правильно все делаю, в массив передаю значения, все дела
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Судя по всему, тот, кто писал функцию getDataDB не предусмотрел варианта с плейсхолдерами.
Смотрите документацию на эту функцию или её код.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы