Bạn hoàn toàn không cần một bind_result xấu xí với PDO.
Tuy nhiên, bạn cũng không cần phải đếm. Vui lòng tránh các hành động không cần thiết - chúng chỉ làm cồng kềnh và làm xáo trộn mã của bạn mà không có lý do.
Trước tiên, hãy nghĩ xem bạn cần gì từ truy vấn? Bạn có thực sự cần phải đếm không? Không. Những gì bạn thực sự cần chỉ là một lá cờ - nếu người dùng tồn tại hoặc không. Vì vậy, hãy thực hiện một truy vấn để trả về một cờ như vậy.
$stmt = $this->pdo->prepare("SELECT 1 FROM users WHERE email=?");
$stmt->execute(array($_POST['email']));
$exists = $stmt->fetchColumn();
Tương tự đối với tất cả các phần khác của mã
//escape the POST data for added protection
Bạn không thực sự "thoát" bất kỳ dữ liệu nào trong khối mã này và không có biện pháp bảo vệ nào. Tuy nhiên, tôi thấy hoàn toàn không có ý nghĩa trong việc chèn NULL làm email. Bạn có chắc mình thực sự muốn nó không?