Je pense que cela peut être dû au fait que vous avez décerné chaque liaison deux fois dans la déclaration, par exemple. :firstname
apparaît dans les VALUES
ainsi que la clause ON DUPLICATE KEY UPDATE
clause.
Vous ne passez que 8 liaisons au $stmt->execute
mais PDO en recherche 16.
Vous pouvez essayer de les nommer légèrement différemment dans le ON DUPLICATE KEY UPDATE
clause vous donnant une requête telle que par exemple
INSERT INTO am_administrator (firstName,lastName,username,password,email,isSuperUser,dateCreated,dateLastModified) VALUES (:firstName,:lastName,:username,:password,:email,:isSuperUser,:dateCreated,:dateLastModified) ON DUPLICATE KEY UPDATE firstName = :update_firstName,lastName = :update_lastName,username = :update_username,password = :update_password,email = :update_email,isSuperUser = :update_isSuperUser,dateCreated = :update_dateCreated,dateLastModified = :update_dateLastModified;