0

I have a simple method that is not working as it should - would like to use prepared statements but somehow it is not executed; instead the raw query works just fine.

What could be the problem? Should I pass some extra args to pdo methods?

$_POST['sequence'] = [
    0 => 2,
    1 => 1
];

if (!empty($_POST['sequence'])) {
    $query = '
        UPDATE '.$this->db->backtick($this->controller->table).'
        SET `sequence` = CASE `id`'
        ;

    foreach ($_POST['sequence'] as $sequence => $id) {
        $values[':id'.$id] = $id;
        $values[':sequence'.$sequence] = $sequence;
        $query .= ' WHEN :id'.$id.' THEN :sequence'.$sequence;
    }

    $values[':ids'] = implode(',', array_values($_POST['sequence']));

    $query .= ' END WHERE `id` IN (:ids)';

    $statement = $this->db->handle->prepare($query);
    $statement->execute($values); //doesn't work

    //$query2 = str_replace(array_keys($values), array_values($values), $query);
    //$this->db->handle->query($query2); works
}
etilge
  • 85
  • 1
  • 9

1 Answers1

0

Don't bind the param inside IN

$query .= ' END WHERE `id` IN ('.implode(',', array_values($_POST['sequence'])).')';
etilge
  • 85
  • 1
  • 9