sql >> Databáze >  >> RDS >> Mysql

Jak zkontrolovat, zda uživatelské jméno již existuje s PHP/MYSQL

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

Reference PDO:http://php.net/manual/en/book.pdo. php

Většina programátorů PHP zjistila, jak používat rozšíření MySQLi a MySQL. PHP Data Objects (PDO) však nabízí způsoby, jak pracovat s objekty a získávat připravené příkazy, které práci značně usnadňují.

PDO je nástroj pro přístup k databázi v PHP, který umožňuje jednotný přístup napříč více databázemi. Nepodporuje syntaxi specifickou pro databáze, ale umožňuje relativně bezproblémové přepínání mezi různými platformami a databázemi, což lze jednoduše provést změnou připojovacího řetězce.

Níže je několik informací o PDO, které jsou zaměřeny především na programátory, kteří stále používají rozšíření MySQL a MySQLi, a nastiňuje jejich přednost. Různé aspekty budou studovány v několika následujících odstavcích.

  • Podpora databáze

Rozšíření PDO má schopnost přístupu k jakékoli databázi, pro kterou byl ovladač PDO napsán. K dispozici je mnoho ovladačů PDO, z nichž některé zahrnují ovladače PDO určené pro přístup k databázím Free TDS, Sybase, Microsoft SQL Server, IBM DB2, Firebird/Interbase 6, Oracle Call Interface a PostgreSQL a mnoha dalším.

Ovladače nejsou automaticky dostupné v každém systému, takže budete muset najít své dostupné ovladače a přidat ty, které potřebujete.

  • Připojení k databázi

Existují různé syntaxe pro navázání databázových připojení, které závisí na konkrétních databázích. Při používání PDO se chcete ujistit, že vaše operace jsou zabaleny do bloků try/catch a že používáte techniku ​​výjimek.

V normálních případech je třeba vytvořit pouze jedno připojení a připojení jsou uzavřena naprogramováním popisovače databáze jako null. Můžete vyhledat konkrétnější možnosti a syntaxi na různých stránkách zdrojů.

  • Ošetření chyb

PDO umožňuje použití výjimek pro zpracování chyb, a proto se doporučuje zabalit PDO do bloků pokusu/úlovku. Tímto způsobem lze PDO vnutit do příslušného atributu chybového režimu za účelem vytvoření výjimky.

Existují tři režimy – tichý (výchozí), varování a výjimka. Poslední dva jsou užitečnější při programování DRY. Režim chyb „Varování“ je užitečný pro ladění a režim „Výjimka“ umožňuje elegantní zpracování chyb a zároveň skrývá data, která by někdo mohl použít ke zneužití vašeho systému.

  • Vložení a aktualizace

PDO zhušťuje běžné operace vkládání a aktualizace databáze do jednoduchého dvoufázového procesu:Prepare >> [Bind] >> Execute . Pomocí této metody můžete plně využít připravené příkazy PDO, které vám nabízejí ochranu před škodlivými útoky prostřednictvím SQL injection.

Připravené příkazy jsou předpřipravené příkazy SQL, které lze provést několikrát odesláním těchto dat na servery. Jsou výhodné v tom, že data použitá v zástupných symbolech jsou automaticky chráněna před útoky SQL injection.

Kód PDO pro kontrolu, zda v databázi existují pole uživatelského jména a hesla:

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

Doufám, že tento odkaz může být užitečný pro vlastní vývoj kódů v budoucím projektu.



  1. DBMS_SCHEDULER Příklad spuštění úlohy každou hodinu

  2. souběžné čtení a zápis do tabulky MySQL

  3. Nelze se připojit k MySQL Workbench na Macu. Nelze se připojit k serveru MySQL na '127.0.0.1' (61) Mac Macintosh

  4. jak najít všechny indexy a jejich sloupce pro tabulky, pohledy a synonyma v oracle