You can only indicate values and never SQL commands, which includes fields;
Example of how you could do your query:
$sqlupdate = " UPDATE eventos SET nome = ? , cod_tipo_evento = ? , cod_municipio_evento = ? WHERE num_codigo_pk = ?";
$sth = $db->prepare($sqlupdate);
$sth->bindValue(1 ,$_POST["nome_evento"], PDO::PARAM_STR);
$sth->bindValue(2 ,$_POST["cod_tipo_evento"], PDO::PARAM_INT);
$sth->bindValue(3 ,$_POST["cod_municipio_evento"], PDO::PARAM_INT);
$sth->bindValue(4 , $_POST["num_codigo_pk "], PDO::PARAM_INT);
$sth->execute();
I also recommend doing some validation on the dandos before inserting them directly; For example:
$codEvento = intval($_POST["cod_tipo_evento"]);
// Ou validar algo para ver se nao esta vazio
$nomEvento = isset($_POST["nome_evento"]) ? $_POST["nome_evento"] : '';
To have all fields dynamically:
$campos = array();
if (isset($_POST["nome_evento"])) {
$campos[] = 'nome';
}
if (isset($_POST["cod_tipo_evento"])){
$campos[] = 'cod_tipo_evento';
}
if (isset($_POST["cod_municipio_evento"])){
$campos[] = 'cod_municipio_evento';
}
if(count($campos) == 0) {
die('Nao foi selecionado nenhum campo para atualizar!');
}
$sql = 'UPDATE eventos SET ';
$sql .= implode(" = ?,", $campos);
$sql .= ' = ? WHERE num_codigo_pk = ?';
In this way you generate the UPDATE only of the fields that came from the POST;