Mysql
 sql >> Database >  >> RDS >> Mysql

Come verificare se il nome utente esiste già con PHP/MYSQL

Riferimento MYSQLI:http://php.net/manual/en/mysqli.query. php

Riferimento DOP:http://php.net/manual/en/book.pdo. php

La maggior parte dei programmatori PHP ha scoperto come utilizzare le estensioni MySQLi e MySQL. Tuttavia, PHP Data Objects (PDO) offre modi per lavorare con gli oggetti e recuperare istruzioni preparate che rendono il lavoro molto più semplice.

PDO è uno strumento di accesso al database in PHP che consente un accesso uniforme su più database. Non supporta la sintassi specifica per i database, ma consente un passaggio relativamente semplice tra piattaforme e database diversi, cosa che può essere eseguita semplicemente modificando la stringa di connessione.

Di seguito sono riportate alcune informazioni su PDO, rivolte principalmente ai programmatori che stanno ancora utilizzando le estensioni MySQL e MySQLi, sottolineando la superiorità del primo. Diversi aspetti verranno studiati nei prossimi paragrafi.

  • Supporto database

L'estensione PDO ha la capacità di accedere a qualsiasi database per cui è stato scritto il driver PDO. Sono disponibili molti driver PDO, alcuni dei quali includono driver PDO destinati ad accedere ai database Free TDS, Sybase, Microsoft SQL Server, IBM DB2, Firebird/Interbase 6, Oracle Call Interface e PostgreSQL, tra molti altri.

I driver non sono automaticamente disponibili in tutti i sistemi, quindi dovrai trovare i driver disponibili e aggiungere quelli di cui hai bisogno.

  • Connessione al database

Esistono diverse sintassi per stabilire connessioni al database che dipendono da database specifici. Quando utilizzi PDO, vuoi assicurarti che le tue operazioni siano racchiuse in blocchi try/catch e che utilizzi la tecnica dell'eccezione.

In casi normali, è necessaria solo una singola connessione e le connessioni vengono chiuse programmando l'handle del database come null. Puoi cercare opzioni e sintassi più specifiche in vari siti di risorse.

  • Gestione degli errori

PDO consente l'uso di eccezioni per la gestione degli errori, motivo per cui si consiglia di avvolgere PDO in blocchi try/catch. In questo modo, PDO può essere forzato nell'attributo relativo alla modalità di errore per produrre un'eccezione.

Sono disponibili tre modalità:silenziosa (predefinita), avviso ed eccezione. Gli ultimi due sono più utili nella programmazione DRY. La modalità di errore "Avviso" è utile per il debug e la modalità "eccezione" consente una gestione regolare degli errori nascondendo i dati che una persona potrebbe utilizzare per sfruttare il tuo sistema.

  • Inserti e aggiornamenti

PDO condensa le comuni operazioni di inserimento e aggiornamento del database in un semplice processo in due fasi:Prepare >> [Bind] >> Execute . Con questo metodo, puoi sfruttare appieno le istruzioni preparate da PDO, che ti offrono protezione contro attacchi dannosi tramite SQL injection.

Le istruzioni preparate sono istruzioni SQL precompilate che possono essere eseguite più volte inviando questi dati ai server. Sono vantaggiosi in quanto i dati utilizzati all'interno dei segnaposto sono automaticamente protetti dagli attacchi SQL injection.

Codice PDO per verificare se i campi username e password esistono nel DB:

 <?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();
}

Spero quindi che questo riferimento possa esserti utile per sviluppare i codici nel progetto futuro da solo.