W ogóle nie potrzebujesz brzydkiego bind_result z PDO.
Ale nie musisz też liczyć. Proszę, unikaj niepotrzebnych działań - one tylko nadymają i zaciemniają twój kod bez powodu.
Zastanów się najpierw, czego potrzebujesz z zapytania? Czy naprawdę musisz liczyć? Nie. To, czego faktycznie potrzebujesz, to tylko flaga - czy użytkownik istnieje, czy nie. Zrób więc zapytanie, które zwróci taką flagę.
$stmt = $this->pdo->prepare("SELECT 1 FROM users WHERE email=?");
$stmt->execute(array($_POST['email']));
$exists = $stmt->fetchColumn();
To samo dotyczy wszystkich pozostałych części kodu
//escape the POST data for added protection
W rzeczywistości nie „uciekasz” żadnych danych w tym bloku kodu i nie dodajesz żadnej ochrony. Jednak nie widzę żadnego sensu w wstawianiu wartości NULL jako wiadomości e-mail. Czy na pewno tego chcesz?