我使用的是@mysql/xdevapi-npm包,本地安装的是mysql-8.0.15-winx64。我正在尝试执行一个带有参数的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:...@mysqlxdevapilibProtocolResponseHandlersBaseHandler.js:110:19)
at Array.entry (C:...@mysqlxdevapilibProtocolResponseHandlersBaseHandler.js:87:29)
at WorkQueue.process (C:...@mysqlxdevapilibWorkQueue.js:75:19)
at Client.handleServerMessage (C:...@mysqlxdevapilibProtocolClient.js:198:21)
at Client.handleNetworkFragment (C:...@mysqlxdevapilibProtocolClient.js:242:14)
at TLSSocket.stream.on.data (C:...@mysqlxdevapilibProtocolClient.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] } ],
如果我只传递sqlSELECT * 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连接器的首席开发人员