2016-01-13 75 views
0

我有一個簡單的方法,它不工作,因爲它應該 - 想使用準備好的語句,但不知何故它不執行;相反,原始查詢工作得很好。PDO不執行語句

可能是什麼問題?我應該將一些額外的參數傳遞給pdo方法嗎?

$_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 
} 
+0

你收到一條錯誤消息帕拉姆不綁定? –

+0

請參閱:http://stackoverflow.com/questions/920353/can-i-bind-an-array-to-an-in-condition/28067015#28067015 – Progrock

+0

@ destination-data否,沒有錯誤。 – etilge

回答

0

IN

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