Ošklivý bind_result s PDO vůbec nepotřebujete.
Ani ty však nemusíš počítat. Prosím, vyvarujte se zbytečných akcí – pouze nafukují a zatemňují váš kód bez důvodu.
Nejprve se zamyslete, co z dotazu potřebujete? Opravdu potřebujete počítat? Ne. Ve skutečnosti potřebujete pouze příznak - zda uživatel existuje nebo ne. Proveďte tedy dotaz, který vrátí takový příznak.
$stmt = $this->pdo->prepare("SELECT 1 FROM users WHERE email=?");
$stmt->execute(array($_POST['email']));
$exists = $stmt->fetchColumn();
Totéž platí pro všechny ostatní části kódu
//escape the POST data for added protection
V tomto bloku kódu ve skutečnosti „neuniknete“ žádným datům a nepřidáte žádnou ochranu. Přesto nevidím absolutně žádný smysl vkládat NULL jako e-mail. Jste si jisti, že to opravdu chcete?