$conn ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Oui on peut utiliser setAttribute mais c'est également correct comme il l'avait fait en passant un tableau comme paramètre dans la connexion. Et à partir de php 5.3.6 on peut également indiquer le charset donc on peut faire :
// mode d'erreurs
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
// Indispensable pour ne pas avoir execute() qui formate en string avec un tableau en paramètre (incompatible avec la clause limit). En mettant false on utilise l'émulation du sgbd qui se renseigne sur le type des formats demandés par la table.
$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
//charset reconnu dans la connexion à partir de php 5.3.6 auquel cas on peut supprimer l'option MYSQL_ATTR_INIT_COMMAND ci-dessous (qui est préférable à une requête "SET CHARACTER SET utf8")
//$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";
$connexion = new PDO('mysql:host='.$hostname.';dbname='.$database.';charset=utf8', $username, $password, $pdo_options);
Et je serais toi je suivrais l'exemple Exemple #2 Exécute une requête préparée avec un tableau de valeurs (paramètres de nom) plutot que de faire les variables 1 par 1
C'est vrai que c'est intéressant de connaître cette option

(cela dit puisque c'est déjà fait individuellement avec bindParam il lui reste juste à utiliser le execute sans paramètre).
@Malalatiana le bindParam permet de renseigner individuellement le type des données en troisième paramètre (que tu ne renseigne pas) mais cela perd son intérêt si on utilise l'émulation du sgbd comme indiqué plus haut dans mon exemple de code qui désactive l'émulateur php.
Sinon évidemment le execute() est indispensable pour exécuter la requête préparée et comme l'a remarqué
tof73, faudrait voir à ne pas faire une redirection avant l'exécution de ton insert.
Ensuite comme tu l'as fait pour ta connexion il faudrait mettre tes requêtes de la même façon dans des bloc try/catch pour intercepter et gérer les erreurs.
A savoir aussi que pour alléger ton code tu peux utiliser la fonction isset() avec plusieurs variables séparées par une virgule :
isset($a) && isset($b) && isset($c) == isset($a,$b,$c)
(Attention ce n'est pas valable pour empty())