node.js - @mysql/xdevapi 不允许 WHERE field IN (?) 查询的数组参数
问题描述
我正在使用带有本地安装 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"]
那么它只返回第一条记录。
我在文档中找不到任何支持这一点的内容,也找不到解决方法。
解决方案
您需要为数组中的每个值提供一个占位符。在您的情况下,SQL 语句最终应该是:
const sql = "SELECT * FROM table WHERE id IN (?, ?)";
const params = [1, 2];
const result = await session.sql(sql).bind(params).execute();
您可以在此处找到更多详细信息。
免责声明:我是 Node.js 的 MySQL X DevAPI 连接器的主要开发人员
推荐阅读
- swift - SwiftUI 教程 PresentationButton 错误
- ios - 如何在应用程序运行时更改 NavigationBarColor
- java - 如何在生产中部署 H2O flow pojo 文件
- javascript - 如何使用闭包编译器捆绑所有 js 文件
- assembly - x86 汇编 16 位与 8 位立即操作数编码
- android - 构建提供 FileUsesReservedNameException 的 App Bundle
- puppeteer - 如何使用 Puppeteer 在页面中搜索特定 URL 并单击它?
- java - 如何更改 jqgrid 寻呼机中的值
- symfony-4.3 - symfony php bin 控制台路由器匹配命令失败并进入其他位置获取 path_info?
- javascript - IE11 上的 VUE favicon.ico 无法正常显示。(路由器更改时消失)