sql >> Base de Datos >  >> RDS >> Mysql

Cómo verificar si el nombre de usuario ya existe con PHP/MYSQL

Referencia de MYSQLI:http://php.net/manual/en/mysqli.query. php

Referencia de PDO:http://php.net/manual/en/book.pdo. php

La mayoría de los programadores de PHP han descubierto cómo usar las extensiones MySQLi y MySQL. Sin embargo, PHP Data Objects (PDO) ofrece formas de trabajar con objetos y recuperar declaraciones preparadas que facilitan mucho el trabajo.

PDO es una herramienta de acceso a bases de datos en PHP que permite un acceso uniforme a múltiples bases de datos. No es compatible con la sintaxis específica de las bases de datos, pero permite un cambio relativamente fluido entre diferentes plataformas y bases de datos, lo que se puede hacer simplemente cambiando la cadena de conexión.

A continuación se muestra un poco de información sobre PDO, principalmente dirigida a los programadores que todavía usan las extensiones MySQL y MySQLi, destacando la superioridad del primero. Se estudiarán diferentes aspectos en los próximos párrafos.

  • Soporte de base de datos

La extensión PDO tiene la capacidad de acceder a cualquier base de datos para la que se haya escrito el controlador PDO. Hay muchos controladores PDO disponibles, algunos de los cuales incluyen controladores PDO destinados a acceder a bases de datos Free TDS, Sybase, Microsoft SQL Server, IBM DB2, Firebird/Interbase 6, Oracle Call Interface y PostgreSQL, entre muchas más.

Los controladores no están disponibles automáticamente en todos los sistemas, por lo que deberá encontrar los controladores disponibles y agregar los que necesite.

  • Conexión de base de datos

Hay diferentes sintaxis para establecer conexiones de bases de datos que dependen de bases de datos específicas. Al usar PDO, desea asegurarse de que sus operaciones estén envueltas en bloques de prueba/captura y que utilice la técnica de excepción.

En casos normales, solo se necesita realizar una única conexión, y las conexiones se cierran programando el identificador de la base de datos como nulo. Puede buscar opciones y sintaxis más específicas en varios sitios de recursos.

  • Gestión de errores

PDO permite el uso de excepciones para el manejo de errores, por lo que se recomienda envolver PDO en bloques try/catch. De esta manera, se puede forzar a PDO en el atributo de modo de error relevante para producir una excepción.

Hay tres modos:silencioso (predeterminado), advertencia y excepción. Los dos últimos son más útiles en la programación DRY. El modo de error de "Advertencia" es útil para la depuración y el modo de "excepción" permite un manejo de errores elegante mientras oculta datos que una persona podría usar para explotar su sistema.

  • Inserciones y actualizaciones

PDO condensa las operaciones comunes de inserción y actualización de la base de datos en un proceso simple de dos pasos:Prepare >> [Bind] >> Execute . Con este método, puede aprovechar al máximo las declaraciones preparadas de PDO, que le ofrecen protección contra ataques maliciosos a través de la inyección SQL.

Las sentencias preparadas son sentencias SQL precompiladas que pueden ejecutarse varias veces enviando estos datos a los servidores. Tienen la ventaja de que los datos utilizados dentro de los marcadores de posición se protegen automáticamente de los ataques de inyección SQL.

Código PDO para verificar si los campos de nombre de usuario y contraseñas existen en la base de datos:

 <?php
//Connections
try {
    $handler = new PDO('mysql:host=localhost;dbname=s','root', '*');
    $handler->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 do not 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 "User Already Exists.";
} else {
    //Securly insert into database
    $sql = 'INSERT INTO users (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();
}

Espero que esta referencia pueda ser útil para que usted mismo desarrolle los códigos en el futuro proyecto.