Non hai affatto bisogno di un brutto bind_result con PDO.
Eppure non hai nemmeno bisogno di contare. Per favore, evita azioni non necessarie:gonfiano e offuscano solo il tuo codice senza motivo.
Pensa prima, di cosa hai bisogno dalla query? Hai davvero bisogno di contare? No. Ciò di cui hai effettivamente bisogno è solo un flag, se l'utente esiste o no. Quindi, fai una query per restituire un tale flag.
$stmt = $this->pdo->prepare("SELECT 1 FROM users WHERE email=?");
$stmt->execute(array($_POST['email']));
$exists = $stmt->fetchColumn();
Lo stesso vale per tutte le altre parti del codice
//escape the POST data for added protection
In realtà non "scappa" alcun dato in questo blocco di codice e non aggiungi protezione. Eppure non vedo assolutamente alcun senso inserire NULL come e-mail. Sei sicuro di volerlo davvero?