mysqli更新函数不更新行

I m trying to update an item, and I don't know why $q->affected_rows is returning '0.

Some data, which seems right when checked:

var_dump($query_parts) - string(40) "item_description = ?, item_publisher = ?"

var_dump($prep) - string(3) "sii"

var_dump($values)

array(3) {
  [0]=>
  &string(12) "Description"
  [1]=>
  &string(1) "1"
  [2]=>
  &string(3) "729"
}

var_dump($q) - bool(true)

public function editItem($editInfo)
{
    $userItemIDS = array();

    $query_parts = '';
    $prep = '';

    //move item_id to end of $editInfo array
    $item_id = $editInfo['item_id'];

    unset($editInfo['item_id']);

    $editInfo['item_id'] = $item_id;

    $editFiltered = array_filter($editInfo);

    $theData = $this->helperClass->data($editFiltered);
    $columns = $theData[0];
    $values = $theData[1];

    (!empty($editInfo['item_description']) ? $prep .= "s" : "");
    (!empty($editInfo['item_publisher']) ? $prep .= "i" : "");
    (!empty($editInfo['item_year']) ? $prep .= "i" : "");
    (!empty($editInfo['item_number']) ? $prep .= "i" : "");
    (!empty($item_id) ? $prep .= "i" : "");

    unset($editInfo['item_id']);

    foreach($editInfo as $key=>$value)
    {
        if(!empty($editInfo[$key]))
        {
            $query_parts .= "".$key." = ?, ";
        }
    }

    $query_parts = substr($query_parts, 0, -2);

    var_dump($query_parts);

    $q = $this->db->mysqli->prepare("UPDATE items SET ".$query_parts." WHERE id = ?");

    $userItemIDS = $this->helperClass->userItemIDS();
    //var_dump($userItemIDS);
    if( !in_array($item_id, $userItemIDS) )
    {
        return false;
    }

    if($q)
    {

        //var_dump($q);
        var_dump($prep);
        var_dump($values);

        call_user_func_array( array($q, 'bind_param'), array_merge(array($prep), $values) );

        $q->execute();
        $a_r = $q->affected_rows;
        $q->close();

        return $a_r;
    }

}