javascript - Hata: mysqld_stmt_execute için yanlış argümanlar


Bir NodeJs projesi üzerinde çalışıyorum ve mysql veritabanı için mysql2 npm paketini kullanıyorum.

My MySql Yapılandırmam:-

let mysql = MYSQL.createConnection({
  host: `${config.mysql.host}`,
  user: `${config.mysql.user}`,
  password: `${config.mysql.password}`,
  database: `${config.mysql.db}`,
});

Bir sorgu kullanırken

async function getUsers ({pageNumber}) { // suppose pageNumber = 1
  const [result] = await mysql.execute(
   `SELECT * FROM user LIMIT ?,20;`,
    [pageNumber]
  );
  return result;
}

Yukarıdaki kod düzgün çalışıyor. Ama herhangi bir sayıyı pageNumber ile çarpmaya çalıştığımda Hata: mysqld_stmt_execute için yanlış argümanlar hatası veriyor

Ör.

async function getUsers ({pageNumber}) { // suppose pageNumber = 1
  pageNumber = pageNumber * 20; // here we multiply 20 with pageNumber (20 is the row limit)
  const [result] = await mysql.execute(
   `SELECT * FROM user LIMIT ?,20;`,
    [pageNumber]
  );
  return result;
}

Yukarıdaki kod hata veriyor.

Not: pageNumber türü string değil number'dır.

Lütfen yardım edin.

Cevap #1

Bu, MySQL sürüm 8.0.22'de ortaya çıkan bir hata gibi görünüyor; 8.0.19'dan güncelledikten sonra aynı hatayı alıyorum. Nedeni veya doğru çözümü konusunda emin değilim, bu arada değerleri string'lere eşliyorum, https://github.com/sidorares/node-mysql2/issues/1239#issuecomment-718471799 adresinde belirtildiği gibi, ve bu işe yarıyor gibi görünüyor.

Cevap #2

LIMIT ve OFFSET değerlerini gönderirken benzer bir sorun yaşadım! Görünüşe göre .execute(), LIMIT ve OFFSET için yer tutucuları doğru şekilde işlemiyor. Bunu .query()'ye geçerek düzelttim ve sorunsuz çalıştı.

Belki bunu deneyebilirsin,

const [result] = await mysql.query(`SELECT * FROM user LIMIT ?,20;`,
[pageNumber]);