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

Sådan kontrollerer du, om brugernavnet allerede eksisterer med PHP/MYSQL

MYSQLI-reference:http://php.net/manual/en/mysqli.query. php

PDO-reference:http://php.net/manual/en/book.pdo. php

De fleste PHP-programmører har opdaget, hvordan man bruger MySQLi og MySQL-udvidelser. PHP Data Objects (PDO) tilbyder dog måder at arbejde med objekter på og hente forberedte sætninger, som gør arbejdet meget lettere.

PDO er et databaseadgangsværktøj i PHP, som muliggør ensartet adgang på tværs af flere databaser. Den understøtter ikke syntaks, der er specifik for databaser, men den tillader relativt problemfri skift mellem forskellige platforme og databaser, hvilket ganske enkelt kan gøres ved at ændre forbindelsesstrengen.

Nedenfor er lidt information om PDO, hovedsageligt rettet mod programmører, der stadig bruger MySQL- og MySQLi-udvidelser, og skitserer førstnævntes overlegenhed. Forskellige aspekter vil blive studeret i de næste par afsnit.

  • Databaseunderstøttelse

PDO-udvidelsen har mulighed for at få adgang til enhver database, som PDO-driveren er skrevet til. Der er mange PDO-drivere tilgængelige, hvoraf nogle få inkluderer PDO-drivere beregnet til at få adgang til gratis TDS, Sybase, Microsoft SQL Server, IBM DB2, Firebird/Interbase 6, Oracle Call Interface og PostgreSQL-databaser, blandt mange flere.

Driverne er ikke automatisk tilgængelige i alle systemer, så du bliver nødt til at finde dine tilgængelige drivere og tilføje dem, du har brug for.

  • Databaseforbindelse

Der er forskellige syntakser til at etablere databaseforbindelser, som afhænger af specifikke databaser. Når du bruger PDO, vil du sikre dig, at dine operationer er pakket ind i try/catch-blokke, og at du bruger undtagelsesteknikken.

I normale tilfælde skal der kun oprettes en enkelt forbindelse, og forbindelser lukkes ved at programmere databasehåndtaget som et null. Du kan slå mere specifikke muligheder og syntaks op på forskellige ressourcewebsteder.

  • Fejlhåndtering

PDO giver mulighed for brug af undtagelser til fejlhåndtering, hvorfor du rådes til at indpakke PDO i try/catch-blokke. På denne måde kan PDO tvinges ind i den relevante fejltilstandsattribut for at producere en undtagelse.

Der er tre - lydløs (standard), advarsel og undtagelse - tilstande. De to sidstnævnte er mere nyttige i DRY-programmering. 'Advarsel'-fejltilstand er nyttig til fejlfinding, og 'undtagelse'-tilstanden tillader yndefuld fejlhåndtering, mens data skjules, som en person kan bruge til at udnytte dit system.

  • Indsættelser og opdateringer

PDO kondenserer de almindelige indsættelses- og opdateringsdatabaseoperationer til en simpel to-trins proces:Prepare >> [Bind] >> Execute . Med denne metode kan du drage fuld fordel af PDO's forberedte sætninger, som tilbyder dig beskyttelse mod ondsindede angreb gennem SQL-injektion.

Forberedte sætninger er forudopfyldte SQL-sætninger, som kan udføres flere gange ved at sende disse data til serverne. De er fordelagtige ved, at data, der bruges i pladsholderne, automatisk er beskyttet mod SQL-injektionsangreb.

PDO-kode for at kontrollere, om felterne brugernavn og adgangskoder findes i 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();
}

Håber så denne reference kan være nyttig for dig til selv at udvikle koderne i det fremtidige projekt.



  1. Kør en forespørgsel med en LIMIT/OFFSET og få også det samlede antal rækker

  2. Valg af de sidste 7 dage fra Now() i MYSQL

  3. Er det muligt at gemme billeder, lyde, videoer i SQL-databasen?

  4. Sådan vælges og sorteres efter kolonner, der ikke er i Groupy By SQL-sætning - Oracle