Mysqli绑定param更新

I just started creating mysqli bind_param update function. My insert function works fine, but there i get error - Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables. I dont get where is the problem.

My array = Array ( [bday_month] => 9 [bday_day] => 7 [bday_year] => 2003 [id] => 2 )
    public function update($table, $data) {
            if (empty($table) || empty($data)) {
                return false;
            }

            $array_slice = array_slice($data, 0, count($data)-1);

            $fields = implode(' = ?, ', array_keys($array_slice)) . ' = ?';

            $stmt = $this->db->prepare("UPDATE `{$table}` SET {$fields} WHERE `id` = ?");
            call_user_func_array(array($stmt, 'bind_param'), $this->refValues($data));
            $stmt->execute();
        }

i have this one worked for me you could see it

 /**
 * update
 * @author Alaa M. Jaddou
 * @param string $table A name of table to insert into
 * @param string $data An associative array
 * @param string $where the WHERE query part
 */
public function update($table, $data, $where)
{
    ksort($data);

    $fieldDetails = NULL;
    foreach($data as $key=> $value) {
        $fieldDetails .= "`$key`= ?,";
    }
    $fieldDetails = rtrim($fieldDetails, ',');

    $sth = $this->prepare("UPDATE $table SET $fieldDetails WHERE $where");

    $values = array(); 
    foreach ($data as $key => $value) {
        $values = implode(', ', $value);
    }
    $sth->bind_param($values);
    return $sth->execute();
}

Solved. I forget insert types.