3

我正在开发一个 nodeJs 项目并使用 npm 包mysql2用于 mysql 数据库。

我的 MySql 配置:-

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

当我使用查询时

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

上面的代码工作正常。但是当我试图将任何数字与 pageNumber 相乘时,它会抛出错误Error: Incorrect arguments to mysqld_stmt_execute

前任。

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;
}

上面的代码抛出错误。

注意:- pageNumber 的类型是数字而不是字符串。

请帮忙。

4

2 回答 2

3

这似乎是 MySQL 版本 8.0.22 中引入的错误,从 8.0.19 更新后我遇到了同样的错误。不确定原因或正确的解决方案,在此期间我将值映射到字符串,根据https://github.com/sidorares/node-mysql2/issues/1239#issuecomment-718471799,这似乎工作.

于 2021-01-28T20:13:24.507 回答
2

就像一辆越野车,像这样使用插值(是的,这是一种不好的做法,但您可以同时提出解决方案):

const [result] = await mysql.execute(
   `SELECT * 
    FROM user 
    LIMIT ${pageNumber},20;` 
  );

并且,如果变量是字符串,则在插值周围放置 ' '

`SELECT * FROM user WHERE xname = '${x}'  ;`
于 2021-03-04T04:33:23.343 回答