Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como verificar se o nome de usuário já existe com PHP/MYSQL


Referência MYSQLI:http://php.net/manual/en/mysqli.query. php

Referência PDO:http://php.net/manual/en/book.pdo. php

A maioria dos programadores PHP descobriu como usar as extensões MySQLi e MySQL. No entanto, PHP Data Objects (PDO) oferece maneiras de trabalhar com objetos e recuperar instruções preparadas que tornam o trabalho muito mais fácil.

PDO é uma ferramenta de acesso a banco de dados em PHP que permite acesso uniforme em vários bancos de dados. Ele não suporta sintaxes específicas para bancos de dados, mas permite uma alternância relativamente perfeita entre diferentes plataformas e bancos de dados, o que pode ser feito simplesmente alterando a string de conexão.

Abaixo algumas informações sobre o PDO, direcionadas principalmente a programadores que ainda utilizam extensões MySQL e MySQLi, destacando a superioridade da primeira. Diferentes aspectos serão estudados nos próximos parágrafos.
  • Suporte de banco de dados

A extensão PDO tem a capacidade de acessar qualquer banco de dados para o qual o driver PDO foi escrito. Existem muitos drivers PDO disponíveis, alguns dos quais incluem drivers PDO destinados a acessar bancos de dados Free TDS, Sybase, Microsoft SQL Server, IBM DB2, Firebird/Interbase 6, Oracle Call Interface e PostgreSQL, entre muitos outros.

Os drivers não estão automaticamente disponíveis em todos os sistemas, então você terá que encontrar os drivers disponíveis e adicionar os que você precisa.
  • Conexão de banco de dados

Existem diferentes sintaxes para estabelecer conexões de banco de dados que dependem de bancos de dados específicos. Ao usar o PDO, você deseja garantir que suas operações sejam agrupadas em blocos try/catch e que você utilize a técnica de exceção.

Em casos normais, apenas uma única conexão precisa ser feita e as conexões são fechadas programando o identificador do banco de dados como nulo. Você pode procurar opções e sintaxes mais específicas em vários sites de recursos.
  • Tratamento de erros

O PDO permite o uso de exceções para tratamento de erros, e é por isso que você é aconselhado a envolver o PDO em blocos try/catch. Dessa forma, o PDO pode ser forçado no atributo de modo de erro relevante para produzir uma exceção.

Existem três modos – silencioso (padrão), aviso e exceção. Os dois últimos são mais úteis na programação DRY. O modo de erro 'Aviso' é útil para depuração e o modo 'exceção' permite o tratamento de erros gracioso enquanto oculta dados que uma pessoa pode usar para explorar seu sistema.
  • Inserções e atualizações

O PDO condensa as operações comuns de inserção e atualização do banco de dados em um processo simples de duas etapas:Prepare >> [Bind] >> Execute . Com esse método, você pode aproveitar ao máximo as declarações preparadas do PDO, que oferecem proteção contra ataques maliciosos por meio de injeção de SQL.

As instruções preparadas são instruções SQL pré-compiladas que podem ser executadas várias vezes enviando esses dados para os servidores. Eles são vantajosos porque os dados usados ​​nos espaços reservados são automaticamente protegidos contra ataques de injeção de SQL.

Código PDO para verificar se os campos de nome de usuário e senhas existem no banco de dados:
 <?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 referência possa ser útil para você desenvolver os códigos no projeto futuro por conta própria.