【问题标题】:express.js, MySQL paginationexpress.js,MySQL 分页
【发布时间】:2021-09-19 17:37:25
【问题描述】:

我正在尝试在服务器上进行分页,但我收到来自 MySQL 的语法错误。

对不起,我是新手,所以我不太明白问题在哪里......

这是我的代码: (FullUrl 它是 BASE_URL 和 url 的结合 - 此表中的列)

router.get('/', function (req, res) {
  let numRows;
  let numPerPage = parseInt(req.query.npp, 10) || 40;
  let page = parseInt(req.query.page, 10) || 0;
  let numPages;
  let skip = page * numPerPage;

  let limit = skip + ',' + numPerPage;
    queryAsync(`SELECT count(*, concat('${BASE_URL}/', url) as FullUrl) FROM urls as numRows`)
     .then(function(results) {
      numRows = results[0].numRows;
      numPages = Math.ceil(numRows / numPerPage);
      console.log('number of pages:', numPages + 'number of rows:', numRows);
    })
   .then(() => queryAsync(`SELECT *, concat('${BASE_URL}/', url) as FullUrl FROM urls LIMIT ` + limit))
    .then(function(results) {
      const responsePayload = {
        name: 'marketing_campaign',
        data: results
      };
    if (page < numPages) {
      responsePayload.pagination = {
        current: page,
        perPage: numPerPage,
        previous: page > 0 ? page - 1 : null,
        next: page < numPages - 1 ? page + 1 : null,
        pages: numPages
      }
    }
    else responsePayload.pagination = {
      err: 'queried page ' + page + ' is >= to maximum page number ' + numPages
    }
    res.json(responsePayload);
  })
  .catch(function(err) {
    console.error(err);
    res.json({ err: err });
  });
});

MySQL 错误:

{
    "err": {
        "cause": {
            "code": "ER_PARSE_ERROR",
            "errno": 1064,
            "sqlMessage": "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 ', concat('http://localhost:3001/', url) as FullUrl) FROM urls as numRows' at line 1",
            "sqlState": "42000",
            "index": 0,
            "sql": "SELECT count(*, concat('http://localhost:3001/', url) as FullUrl) FROM urls as numRows"
        },
        "isOperational": true,
        "code": "ER_PARSE_ERROR",
        "errno": 1064,
        "sqlMessage": "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 ', concat('http://localhost:3001/', url) as FullUrl) FROM urls as numRows' at line 1",
        "sqlState": "42000",
        "index": 0,
        "sql": "SELECT count(*, concat('http://localhost:3001/', url) as FullUrl) FROM urls as numRows"
    }
}

【问题讨论】:

  • COUNT(*) 中需要右括号。
  • 你的查询完全没有意义,count里面没有逗号,as也不在count里,那你要数什么

标签: mysql node.js api express mysql-error-1064


【解决方案1】:

你可以关闭括号。

但既然你只想要计数,为什么还要添加另一列呢?

queryAsync(`SELECT count(*) as numRows FROM urls as numRows`)

【讨论】:

  • 谢谢你,但是......真是太好了 - prnt.sc/19qenyq。但我需要什么 - prnt.sc/19qetjj
  • 这使得我已经写过使用更改后的答案更合理
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 2013-05-25
  • 2018-01-12
相关资源
最近更新 更多