MYSQL: Diese Erweiterung wurde in PHP 5.5.0 veraltet, und es wurde in PHP 7.0.0 entfernt. Stattdessen sollte die MySQLi
oder PDO_MySQL
Erweiterung verwendet werden.
MYSQLI Referenz: http://php.net/manual/en/mysqli.query.php
PDO Referenz: http://php.net/manual/en/book.pdo.php
Vorteile von PDO mit:
Die meisten PHP-Programmierer haben entdeckt, wie MySQLi und MySQL-Erweiterungen zu verwenden. PHP Data Objects (PDO) bieten jedoch Möglichkeiten, mit Objekten zu arbeiten und vorbereitete Anweisungen abzurufen, die die Arbeit wesentlich erleichtern.
PDO ist ein Datenbankzugriffstool in PHP, das einen einheitlichen Zugriff auf mehrere Datenbanken ermöglicht. Es unterstützt keine Datenbanken spezifischen Syntax, aber es ermöglicht relativ nahtlose Wechsel zwischen verschiedenen Plattformen und Datenbanken, die einfach durch Ändern der Verbindungszeichenfolge durchgeführt werden können.
Im Folgenden finden Sie einige Informationen über PDO, die hauptsächlich an Programmierer gerichtet sind, die immer noch die Erweiterungen MySQL und MySQLi verwenden, um die Überlegenheit des ersten zu verdeutlichen. Verschiedene Aspekte werden in den nächsten Absätzen untersucht.
Die PDO-Erweiterung hat die Fähigkeit, eine beliebige Datenbank zuzugreifen, die die PDO-Treiber für geschrieben wurde. Es gibt viele PDO-Treiber, von denen einige PDO-Treiber enthalten, die unter anderem auf Free TDS-, Sybase-, Microsoft SQL Server-, IBM DB2-, Firebird/Interbase 6-, Oracle Call Interface- und PostgreSQL-Datenbanken zugreifen.
Die Treiber sind nicht automatisch in jedem System verfügbar, daher müssen Sie Ihre verfügbaren Treiber finden und die Treiber hinzufügen, die Sie benötigen.
Es gibt verschiedene Syntax der sind Datenbankverbindungen zu schaffen, die auf bestimmte Datenbanken abhängen. Wenn Sie PDO verwenden, möchten Sie sicherstellen, dass Ihre Operationen in try/catch-Blöcke eingeschlossen sind und dass Sie die Ausnahmemethode verwenden.
Im Normalfall muss nur eine einzige Verbindung hergestellt werden, und die Verbindungen werden geschlossen, indem das Datenbank-Handle als Null programmiert wird. Sie können spezifischere Optionen und Syntax in verschiedenen Ressourcen-Sites nachschlagen.
PDO für die Verwendung von Ausnahmen für die Fehlerbehandlung ermöglicht, weshalb Sie PDO geraten sind in try/catch-Blöcke zu wickeln. Auf diese Weise kann PDO in das entsprechende Fehlermodus-Attribut gezwungen werden, um eine Ausnahme zu erzeugen.
Es gibt drei - stille (Standard), Warnung und Ausnahme - Modi. Die letzten beiden sind bei der DRY-Programmierung nützlicher. Der 'Warning'-Fehlermodus ist nützlich für das Debugging und der' Exception'-Modus erlaubt eine fehlerfreie Fehlerbehandlung, während Daten versteckt werden, die eine Person benutzen könnte, um Ihr System auszunutzen.
PDO kondensiert die gemeinsame Einsatz und Aktualisierung von Datenbankoperationen in einen einfachen zweistufigen Prozess: 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 die in den Platzhaltern verwendeten Daten automatisch vor SQL-Injection-Angriffen geschützt sind.
Daher ist es besser, PDO zu verwenden, und es wird die SQL-Injektionen vermeiden, die jetzt ein Tage vorherrschen.
PDO-Code zu überprüfen, ob die Benutzernamen und Passwörter Felder 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();
}
Hoffnung so diese Referenz könnte nützlich sein für Sie selbst die Codes in der Zukunft Projekt zu entwickeln.
'mysql_query' ist tot, es wurde aus PHP 7 entfernt. Bitte, hör auf es zu benutzen und benutze zumindest 'mysqli'. PDO ist eine noch bessere Option. – tadman
** WARNUNG **: Es ist nicht einfach, eine eigene Zugriffskontrollschicht zu schreiben, und es gibt viele Möglichkeiten, sie schwerwiegend falsch zu machen. Bitte schreiben Sie nicht Ihr eigenes Authentifizierungssystem, wenn Sie ein modernes [Entwicklungsframework] (http://codegeekz.com/best-php-frameworks-for-developers/) wie [Laravel] (http://laravel.com/) verfügt über ein robustes [Authentifizierungssystem] (https://laravel.com/docs/5.2/authentication). Am absolutesten folgen Sie [empfohlene Best Practices für die Sicherheit] (http://www.phptherightway.com/#security) und ** speichern Sie Passwörter niemals als Nur-Text **. – tadman
Könnte ich mich bitte mit dem Benutzernamen "**' foo 'AND' 0 '=' 1' ** "anmelden?(Ich möchte mich mehrmals mit demselben Benutzernamen anmelden.) – spencer7593