Mysql 使用PDO并且喜欢不工作,为什么?

Mysql 使用PDO并且喜欢不工作,为什么?,mysql,pdo,Mysql,Pdo,我正在使用PDO连接到MySQL。一切都很好,除了这个不行 有人知道为什么吗?我该怎么做呢 SELECT * FROM flagIt WHERE :flagids LIKE CONCAT('%', flagIt.flagIt_id, '%') :flagids相当于类似“ID1 ID2 ID3”的字符串 编辑(仅用于比较) 如果我这样使用,它工作得很好,那么…为什么它不与:flagids一起工作 我希望你能理解我的问题 多谢各位 编辑 我试过: "SELECT * FROM flagIt WH

我正在使用PDO连接到MySQL。一切都很好,除了这个不行

有人知道为什么吗?我该怎么做呢

SELECT * FROM flagIt WHERE :flagids LIKE CONCAT('%', flagIt.flagIt_id, '%')
:flagids相当于类似“ID1 ID2 ID3”的字符串

编辑(仅用于比较)

如果我这样使用,它工作得很好,那么…为什么它不与:flagids一起工作

我希望你能理解我的问题

多谢各位

编辑

我试过:

"SELECT * FROM flagIt WHERE flagIt.flagIt_id IN(:flagids)"
正如流浪汉智人所建议的那样

"SELECT * FROM flagIt WHERE FIND_IN_SET(flagIt.flagIt_id, :flagids)"

什么都不管用

这是您提交给PDO::prepare()的查询:

准备语句的过程不仅仅涉及计算占位符的内容、将它们替换为字符串并执行结果查询

prepare
要求服务器评估查询并准备一个执行计划,其中包括它将使用的表和索引。为此,它需要知道必须处理哪些表的哪些列,这就是为什么不能在需要标识符的地方使用占位符

查询的问题是,服务器在准备语句时无法知道占位符是表示字符串文字还是表示列标识符。如果没有这些信息,准备工作将无法完成,您的
prepare
将失败

如果您对在
:flagids
中使用的值有一定的灵活性,则可以使用
在\u set()中查找:

其中包含(例如)ID1、ID2、ID3的变量绑定到
:flagids

这对于小列表来说很好,但是对于大列表来说速度会很慢


不能将绑定变量用于identifier@HoboSapiens我添加了一个比较,与一个有效的方法相比。@HoboSapiens也许我不理解你的评论(我不是专家),但你有什么建议吗?谢谢。正如我在问题(编辑)中所说的,我尝试了不同的方法,但不起作用……现在有什么问题?谢谢。您还没有发布处理此查询的PHP代码,因此可能存在问题。
"SELECT * FROM flagIt WHERE FIND_IN_SET(flagIt.flagIt_id, :flagids)"
SELECT * FROM flagIt WHERE :flagids LIKE CONCAT('%', flagIt.flagIt_id, '%')
SELECT * FROM flagIt WHERE find_in_set(flagIt_id, :flagids)