Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So prüfen Sie mit PHP/MYSQL, ob der Benutzername bereits existiert

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

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

Die meisten PHP-Programmierer haben herausgefunden, wie man MySQLi und MySQL-Erweiterungen verwendet. PHP Data Objects (PDO) bieten jedoch Möglichkeiten, mit Objekten zu arbeiten und vorbereitete Anweisungen abzurufen, die die Arbeit erheblich erleichtern.

PDO ist ein Datenbankzugriffstool in PHP, das einen einheitlichen Zugriff über mehrere Datenbanken hinweg ermöglicht. Es unterstützt keine datenbankspezifische Syntax, erlaubt aber ein relativ nahtloses Umschalten zwischen verschiedenen Plattformen und Datenbanken, was einfach durch Ändern der Verbindungszeichenfolge erfolgen kann.

Nachfolgend finden Sie einige Informationen über PDO, die sich hauptsächlich an Programmierer richten, die immer noch MySQL- und MySQLi-Erweiterungen verwenden, und die Überlegenheit der ersteren skizzieren. Verschiedene Aspekte werden in den nächsten Absätzen untersucht.

  • Datenbankunterstützung

Die PDO-Erweiterung hat die Fähigkeit, auf jede Datenbank zuzugreifen, für die der PDO-Treiber geschrieben wurde. Es sind viele PDO-Treiber verfügbar, von denen einige PDO-Treiber enthalten, die unter anderem für den Zugriff auf Free TDS, Sybase, Microsoft SQL Server, IBM DB2, Firebird/Interbase 6, Oracle Call Interface und PostgreSQL-Datenbanken gedacht sind.

Die Treiber sind nicht automatisch in jedem System verfügbar, daher müssen Sie Ihre verfügbaren Treiber finden und die benötigten hinzufügen.

  • Datenbankverbindung

Es gibt verschiedene Syntaxen, um Datenbankverbindungen herzustellen, die von bestimmten Datenbanken abhängen. Wenn Sie PDO verwenden, möchten Sie sicherstellen, dass Ihre Operationen in Try/Catch-Blöcke verpackt sind und dass Sie die Ausnahmetechnik verwenden.

Im Normalfall muss nur eine einzige Verbindung hergestellt werden, und Verbindungen werden geschlossen, indem das Datenbank-Handle als Null programmiert wird. Sie können spezifischere Optionen und Syntaxen auf verschiedenen Ressourcenseiten nachschlagen.

  • Fehlerbehandlung

PDO erlaubt die Verwendung von Ausnahmen für die Fehlerbehandlung, weshalb Ihnen empfohlen wird, PDO in Try/Catch-Blöcke zu verpacken. Auf diese Weise kann PDO in das entsprechende Fehlermodusattribut gezwungen werden, um eine Ausnahme zu erzeugen.

Es gibt drei Modi – lautlos (Standard), Warnung und Ausnahme. Die beiden letzteren sind bei der DRY-Programmierung nützlicher. Der Fehlermodus „Warnung“ ist nützlich zum Debuggen und der Modus „Ausnahme“ ermöglicht eine elegante Fehlerbehandlung, während Daten verborgen werden, die eine Person verwenden könnte, um Ihr System auszunutzen.

  • Einfügungen und Aktualisierungen

PDO fasst die üblichen Operationen zum Einfügen und Aktualisieren von Datenbanken in einem einfachen zweistufigen Prozess zusammen:Prepare >> [Bind] >> Execute . Mit dieser Methode können Sie die vorbereiteten Anweisungen von PDO voll ausnutzen, die Ihnen Schutz vor böswilligen Angriffen durch SQL-Injection bieten.

Vorbereitete Anweisungen sind vorkompilierte SQL-Anweisungen, die mehrmals ausgeführt werden können, indem diese Daten an die Server gesendet werden. Sie haben den Vorteil, dass innerhalb der Platzhalter verwendete Daten automatisch vor SQL-Injection-Angriffen geschützt werden.

PDO-Code, um zu prüfen, ob die Felder Benutzername und Passwort in der DB vorhanden sind:

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

Ich hoffe, dass diese Referenz für Sie hilfreich sein kann, um die Codes in zukünftigen Projekten selbst zu entwickeln.