public function update($tableExpression, array $data, array $identifier, array $types = array())
{
$set = array();
foreach ($data as $columnName => $value) {
$set[] = $columnName . ' = ?';
}
if (is_string(key($types))) {
$types = $this->extractTypeValues(array_merge($data, $identifier), $types);
}
$params = array_merge(array_values($data), array_values($identifier));
$sql = 'UPDATE ' . $tableExpression . ' SET ' . implode(', ', $set) . ' WHERE ' . implode(' = ? AND ', array_keys($identifier)) . ' = ?';
return $this->executeUpdate($sql, $params, $types);
}