如何解决这个错误:“SQL 错误:参数太多”

编程入门 行业动态 更新时间:2024-10-05 13:27:19

如何解决这个<a href=https://www.elefans.com/category/jswz/34/1771449.html style=错误:“SQL 错误:参数太多”"/>

如何解决这个错误:“SQL 错误:参数太多”

我有一个通过 Firebase Functions 的 API。当使用邮递员向带有正文{“name”:“1234”}的API发送请求时。我收到错误 401“SQL:错误:参数太多

这是我的功能: index.js

const functions = require("firebase-functions");
const mysqlx = require("@mysql/xdevapi");

exports.getUser = functions.https.onRequest(async (req, res) => {
  const name = req.body.name;
  functions.logger.info("name: ", name);
  functions.logger.info("name type: ", typeof name);

  try {
    const session = await mysqlx.getSession({
      user: "user",
      password: "secretpassword",
      host: "hostname",
      schema: "database",
      port: 33060,
    });

    session.sql("USE database").execute().then(() => {
      const sql = "SELECT * FROM database.users WHERE user_name = ?";
      session.sql(sql).bind(1, name).execute()
          .then((result) => {
            res.status(200).send("User gathered: " + result);
          }).catch((err) => {
            functions.logger.info("sql statement: ", sql);
            functions.logger.error("err: ", err);
            res.status(401).send("SQL : " + err);
          });
    }).catch((err) => {
      functions.logger.error("err: ", err);
      res.status(402).send("Session Error:" + err);
    });
  } catch (error) {
    functions.logger.error("error: ", error);
    res.status(500)
        .send("An error occurred while fetching data from the database: " + error);
  }
});

我尝试通过将

user_name
设置为
user_name = ?
user_name = :name
来绑定变量。在尝试绑定时将
user_name
设置为
?
会在所有情况下导致超时,除了我包含的代码块中的那个。将
user_name
设置为
:name
在所有情况下都会导致我的问题中指定的错误。我试过使用所有这些方法进行绑定:

  1. .bind("name": name)
  2. .bind(name)
  3. .bind([name])

我的预期结果是 user_name 列与输入名称匹配的行的响应。从那里我计划从用户行中提取数据,我没有包含其中的代码。

我在整个代码中有多个记录器,这些是记录的值:

  1. functions.logger.info("name: ", name);
    日志:
    name: 1234
  2. functions.logger.info("name type: ", typeof name);
    日志:
    name type: string
  3. functions.logger.info("sql statement: ", sql);
    日志:
    sql statement: SELECT * FROM database.users WHERE user_name = ?
  4. functions.logger.error("err: ", err);
    日志:
err:  Error: Too many arguments
    at SqlResultHandler.BaseHandler.<computed> (/workspace/node_modules/@mysql/xdevapi/lib/Protocol/InboundHandlers/BaseHandler.js:121:17)
    at Array.entry (/workspace/node_modules/@mysql/xdevapi/lib/Protocol/InboundHandlers/BaseHandler.js:92:29)
    at WorkQueue.process (/workspace/node_modules/@mysql/xdevapi/lib/WorkQueue.js:77:19)
    at Client.handleServerMessage (/workspace/node_modules/@mysql/xdevapi/lib/Protocol/Client.js:169:21)
    at Client.handleNetworkFragment (/workspace/node_modules/@mysql/xdevapi/lib/Protocol/Client.js:213:14)
    at TLSSocket.<anonymous> (/workspace/node_modules/@mysql/xdevapi/lib/DevAPI/Connection.js:800:34)
    at TLSSocket.emit (node:events:513:28)
    at TLSSocket.emit (node:domain:552:15)
    at addChunk (node:internal/streams/readable:315:12)
    at readableAddChunk (node:internal/streams/readable:289:9) {
  info: {
    severity: 0,
    code: 5015,
    sqlState: 'HY000',
    msg: 'Too many arguments'
  }
}
回答如下:

参数个数超过了SQL语句中占位符的个数。在你的例子中,声明指定了一个占位符,你 通过

bind(1, name)
.

提供两个参数

如 X DevAPI 用户指南 中所述,命名占位符是 仅支持 CRUD 语句,而 SQL 语句仅支持普通占位符,因此,在这种情况下,

bind(name)
bind([name])
都应该 工作。

免责声明:我是 Node.js 的 MySQL X DevAPI 连接器的首席开发人员

更多推荐

如何解决这个错误:“SQL 错误:参数太多”

本文发布于:2024-05-30 10:53:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1770419.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:错误   太多   如何解决   参数   SQL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!