Verificar si existe un nombre de usuario PDO

¿Cómo podría verificar múltiples factores combinados en lugar de verificar cada uno? Básicamente, estoy usando PDO y tengo que asegurarme de que los nombres de usuario y correos electrónicos sean únicos. Entonces, ¿cómo haría eso? He visto

if ( $sthandler->rowCount() > 0 ) { // do something here } 

Pero hay una mejor manera de hacerlo. Además, si no hay alguien puede explicar cómo trabajaría con eso.

EDITAR Aquí está mi código de consulta que ingresa a la base de datos

  setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e){ exit($e->getMessage()); } $name = $_POST['name']; $username = $_POST['username']; $email = $_POST['email']; $password = $_POST['password']; $password1 = $_POST['passwordconf']; $ip = $_SERVER['REMOTE_ADDR']; //Verifcation if (empty($name) || empty($username) || empty($email) || empty($password) || empty($password1)) { echo "Complete all fields"; } // Password match if ($password != $password1) { echo $passmatch = "Passwords don't match"; } // Email validation if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo $emailvalid = "Enter a valid email"; } // Password length if (strlen($password) prepare($userQuery); $stmt->execute(array(':user' => $user)); return !!$stmt->fetch(PDO::FETCH_ASSOC); } $user = 'userName'; $exists = userExists($db, $user); if(exists) { // user exists already. } else { // user doesn't exist already, you can savely insert him. } if(empty($passmatch) && empty($emailvalid) && empty($passlength)) { //Securly insert into database $sql = 'INSERT INTO userinfo (name ,username, email, password, ip) VALUES (:name,:username,:email,:password,:ip)'; $query = $handler->prepare($sql); $query->execute(array( ':name' => $name, ':username' => $username, ':email' => $email, ':password' => $password, ':ip' => $ip )); } ?> 

  setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e){ exit($e->getMessage()); } $name = $_POST['name']; $username = $_POST['username']; $email = $_POST['email']; $password = $_POST['password']; $password1 = $_POST['passwordconf']; $ip = $_SERVER['REMOTE_ADDR']; //Verifcation if (empty($name) || empty($username) || empty($email) || empty($password) || empty($password1)){ $error = "Complete all fields"; } // Password match if ($password != $password1){ $error = "Passwords don't match"; } // Email validation if (!filter_var($email, FILTER_VALIDATE_EMAIL)){ $error = "Enter a valid email"; } // Password length if (strlen($password) <= 6){ $error = "Choose a password longer then 6 character"; } if(!isset($error)){ //no error $sthandler = $handler->prepare("SELECT username FROM users WHERE username = :name"); $sthandler->bindParam(':name', $username); $sthandler->execute(); if($sthandler->rowCount() > 0){ echo "exists! cannot insert"; } else { //Securly insert into database $sql = 'INSERT INTO userinfo (name ,username, email, password, ip) VALUES (:name,:username,:email,:password,:ip)'; $query = $handler->prepare($sql); $query->execute(array( ':name' => $name, ':username' => $username, ':email' => $email, ':password' => $password, ':ip' => $ip )); } }else{ echo "error occured: ".$error; exit(); } 

Algo como esto debería funcionar:

 function userExists($db, $user) { $userQuery = "SELECT * FROM userinfo u WHERE u.user=:user;"; $stmt = $db->prepare($userQuery); $stmt->execute(array(':user' => $user)); return !!$stmt->fetch(PDO::FETCH_ASSOC); } $user = 'userName'; $exists = userExists($db, $user); if(exists) { // user exists already. } else { // user doesn't exist already, you can savely insert him. } 

El código que muestra no tiene mucho sentido para verificar si el nombre de usuario y el correo electrónico son únicos. Debería establecer UNIQUE KEY en la base de datos.