【问题标题】:@mysql/xdevapi won't allow array parameters for WHERE field IN (?) query@mysql/xdevapi 不允许 WHERE field IN (?) 查询的数组参数
【发布时间】:2021-03-15 10:59:38
【问题描述】:

我正在使用带有本地安装 mysql-8.0.15-winx64 的 @mysql/xdevapi npm 包。 我正在尝试使用参数执行 SQL 字符串。该查询正在查找 id 在数组中的记录。

const sql = "SELECT * FROM table WHERE id IN (?)";
const params = [[1,2]];
const result = await session.sql(sql).bind(params).execute();

我收到以下错误

Error: Invalid data, expecting scalar
    at SqlResultHandler.BaseHandler.(anonymous function) (C:\...\@mysql\xdevapi\lib\Protocol\ResponseHandlers\BaseHandler.js:110:19)
    at Array.entry (C:\...\@mysql\xdevapi\lib\Protocol\ResponseHandlers\BaseHandler.js:87:29)
    at WorkQueue.process (C:\...\@mysql\xdevapi\lib\WorkQueue.js:75:19)
    at Client.handleServerMessage (C:\...\@mysql\xdevapi\lib\Protocol\Client.js:198:21)
    at Client.handleNetworkFragment (C:\...\@mysql\xdevapi\lib\Protocol\Client.js:242:14)
    at TLSSocket.stream.on.data (C:\...\@mysql\xdevapi\lib\Protocol\Client.js:89:36)
    at emitOne (events.js:116:13)
    at TLSSocket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11) info: [Object] } ],

如果我只是传递 sql SELECT * FROM table WHERE id IN (1,2) ,它会工作,返回两条记录。

如果我用逗号分隔的字符串传递单个参数,那么const params = ["1,2"] 那么它只返回第一条记录。

我在文档中找不到任何支持这一点的内容,也找不到解决方法。

【问题讨论】:

    标签: node.js arrays parameters mysql-x-devapi


    【解决方案1】:

    您需要为数组中的每个值提供一个占位符。在您的情况下,SQL 语句最终应该是:

    const sql = "SELECT * FROM table WHERE id IN (?, ?)";
    const params = [1, 2];
    const result = await session.sql(sql).bind(params).execute();
    

    您可以找到更多详细信息here

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

    【讨论】:

    • 哦,太好了,这就是我作为解决方法所做的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2013-05-03
    相关资源
    最近更新 更多