2011-11-29 26 views
5

¿Cómo puedo verificar si existe un nombre de usuario usando PDO? Todo lo que necesito saber es un bool verdadero (existe) o falso (no). Tengo las partes iniciales de configuración, pero estoy seguro de qué hacer a continuaciónCompruebe si existe un nombre de usuario usando PHP PDO

$sthandler = $dbhandler->prepare('SELECT username FROM userdb WHERE username=? LIMIT 1'); 
$sthandler->execute(array('username')); 
// ... What's next? 
+0

Estás a querer contar la cantidad de filas que surgen de la consulta (marque la respuesta de Tom). Si es 0, el usuario no existe, si es 1 o más lo hace. Un consejo: generalmente no limito la consulta, si el nombre de usuario existiera más de una vez que puedo arrojar un error, esto significa que algo está obstruido o que un posible intruso duplicó la cuenta ... – HTDutchy

+0

@ s4uadmin - Tienes que imponer cierta cantidad de integridad de datos directamente en la base de datos, por ejemplo con un índice único De lo contrario, obtendrás pruebas locas de todas las posibilidades de datos corruptos. –

Respuesta

9

Compruebe si el número de filas:

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

Gracias, hombre. Justo lo que necesitaba. Código final: 'if (! $ Sthandler-> rowCount()) throw new invalidUserException();' – enchance

+0

tengo una pregunta, por favor ilumíname, por ejemplo, no existe ningún registro. Count será '0'' 0' no mayor que '0' así que no pasará nada si es '$ sthandler-> rowCount() <1' así que cuando un usuario existe no hará nada para evitar la duplicación y si no existe, ¿continuará? –

2

sólo agarrar la fila:

if($row = $sthandler->fetch()){ 
    // User exists: read its details here 
}else{ 
    // User does not exist 
} 
2
$username_exists = (bool) $sthandler->fetchColumn(); 

Nota que incluso puedes optimizar la consulta un poco, ya que en realidad no necesitas seleccionar el nombre de usuario.

SELECT username FROM userdb ... 

convierte

SELECT 1 FROM userdb ... 
Cuestiones relacionadas