将MySQL IN()与PHP和PDO结合使用

将MySQL IN()与PHP和PDO结合使用,php,mysql,pdo,Php,Mysql,Pdo,我正在开发一个web服务,其中一个参数是设备id列表(energy\u mon\u id)。列表以逗号分隔,例如0,1,2(它使用的其他两个参数是dateFrom和dateTo) 我准备的声明如下: $this->sql = "SELECT $vars FROM $table " . "WHERE energy_mon_id IN(:energy_mon_id) AND CONCAT(date, ' ', time) " .

我正在开发一个web服务,其中一个参数是设备id列表(energy\u mon\u id)。列表以逗号分隔,例如0,1,2(它使用的其他两个参数是dateFrom和dateTo)

我准备的声明如下:

$this->sql = "SELECT $vars FROM $table "

                . "WHERE energy_mon_id IN(:energy_mon_id) AND CONCAT(date, ' ', time) "
                . "BETWEEN :dateFrom AND :dateTo "
                . "$group ORDER BY $orderBy $limit";
问题在于,不是将这些字符识别为单个逗号分隔字符,而是将其解释为一个完整的字符串(我认为)。我试着跟着这个

我四处搜索,发现提供了完全相同的解决方案(似乎对除我之外的所有人都有效)。我很困惑,我从来没有直接问过自己一个问题,所以这是我的第一篇帖子


提前谢谢你的帮助。

谢谢你的评论,他们给我指出了一个合适的帖子,上面有答案。然而,为了简化任何可能有类似问题的人,这个简单的修复程序起到了作用

而不是使用:

WHERE energy_mon_id IN(:energy_mon_id)
我用过:

WHERE find_in_set(energy_mon_id, :energy_mon_id)

这是因为您正在使用一个准备好的语句,您需要做一些额外的工作来将字符串转换为一个可用的列表。查看此链接您是否执行了此操作
$energy\u mon\u id=“””。内爆(“,”,$users)。"'";从你链接中的帖子?它应该可以工作。我认为在普通的语句中,每个传递的值都需要一个占位符,例如:
in(:energy\u mon\u id1,:energy\u mon\u id2,…)
。看看这里:尝试使用内爆,但没有工作。。。大卫,那篇文章正是我需要的!谢谢