Изобщо не се нуждаете от грозен bind_result с PDO.
И все пак не е нужно да броите. Моля, избягвайте ненужните действия - те само раздуват и замъгляват кода ви без никаква причина.
Помислете първо какво ви трябва от заявката? Наистина ли трябва да броите? Не. Това, от което всъщност се нуждаете, е просто флаг - дали потребител съществува или не. Така че, направете заявка, за да върнете такъв флаг.
$stmt = $this->pdo->prepare("SELECT 1 FROM users WHERE email=?");
$stmt->execute(array($_POST['email']));
$exists = $stmt->fetchColumn();
Същото важи и за всички останали части на кода
//escape the POST data for added protection
Вие всъщност не "избягате" от никакви данни в този кодов блок и не добавяте никаква защита. И все пак не виждам абсолютно никакъв смисъл да вмъквам NULL като имейл. Сигурни ли сте, че наистина го искате?