MySQL,其中IN和另一个变量相等

MySQL,其中IN和另一个变量相等,mysql,Mysql,我正在运行下面的查询,希望返回前3行,但是我得到的只是第一行 查询运行 数据库 结果 为什么它不返回前三行,而只返回第一行?它不应该返回任何行,因为列表已用引号括起来,请参见下文。试一试 SELECT * FROM inventories WHERE id IN (1,2,3) AND state = 1 根据注释,SQL将您的字符串转换为整数1,这就是您获得第一条记录的原因。在1,2,3中,它们是数字而不是逗号分隔的字符串'1,2,3'是字符串mysql将尝试隐式转换为整数,假设id是整数

我正在运行下面的查询,希望返回前3行,但是我得到的只是第一行

查询运行

数据库

结果


为什么它不返回前三行,而只返回第一行?

它不应该返回任何行,因为列表已用引号括起来,请参见下文。试一试

SELECT * FROM inventories WHERE id IN (1,2,3) AND state = 1

根据注释,SQL将您的字符串转换为整数1,这就是您获得第一条记录的原因。

在1,2,3中,它们是数字而不是逗号分隔的字符串'1,2,3'是字符串mysql将尝试隐式转换为整数,假设id是整数,并在第一个逗号处停止。看起来确实如此,但是我在ID数组中加入了这样的内容,[].toString——我怎么还能这样做呢?编辑:没关系,这是因为我在转义字符串。我如何确保ID转义,因为它们是用户提供的?您不转义数字。您使用的是哪种编程语言@Borda我相信你指的是带escape的准备语句?我想他指的是用户以字符串形式提供id号列表。因此,解决方案是解析字符串以提取数字列表,或者验证它是否是数字列表,然后只将其包含在查询字符串中而不带引号。
[ RowDataPacket {
    id: 1,
    uid: 1,
    name: 'An Epic Item',
    suggested_price: 29212,
    image: 'http://hanatemplate.com/images/emoji-ok-7.png',
    state: 1 } ]
SELECT * FROM inventories WHERE id IN (1,2,3) AND state = 1