PDO con consultas “DONDE … EN”

Estoy reelaborando algunos códigos PHP para usar PDO para el acceso a la base de datos, pero me encuentro con un problema con una consulta “WHERE … IN”.

Estoy tratando de eliminar algunas cosas de una base de datos, en función de qué elementos de un formulario están marcados. La duración y el contenido de la lista variarán, pero para este ejemplo, imagine que es esto:

$idlist = '260,201,221,216,217,169,210,212,213'; 

Entonces la consulta se ve así:

 $query = "DELETE from `foo` WHERE `id` IN (:idlist)"; $st = $db->prepare($query); $st->execute(array(':idlist' => $idlist)); 

Cuando hago esto, solo se borra la primera identificación. (Supongo que arroja la coma y todo lo demás después).

También he intentado hacer $idlist una matriz, pero luego no elimina nada.

¿Cuál es la forma correcta de usar una lista de artículos en una statement preparada PDO?

Como no puede mezclar los valores (los números) con la lógica de flujo de control (las comas) con las declaraciones preparadas, necesita un marcador de posición por valor.

 $idlist = array('260','201','221','216','217','169','210','212','213'); $questionmarks = str_repeat("?,", count($idlist)-1) . "?"; $stmt = $dbh->prepare("DELETE FROM `foo` WHERE `id` IN ($questionmarks)"); 

y bucle para unir los parámetros.

Haría $ idlist y array, luego simplemente recorro la matriz usando foreach para eliminar el elemento específico.

 $idlist = array('260','201','221','216','217','169','210','212','213'); $stmt = $dbh->prepare("DELETE FROM `foo` WHERE `id` = ?"); $stmt->bindParam(1, $id); foreach ($idlist as $item){ $id = $item; $stmt->execute(); }