2015-09-18 13 views
17

Das ist meine PHP SQL-Anweisung und es wird false zurückgibt, während varMein PDO Statement funktioniert nicht

$password_md5 = md5($_GET['password']); 
$sql = $dbh->prepare('INSERT INTO users(full_name, e_mail, username, password, password_plain) VALUES (:fullname, :email, :username, :password, :password_plain)'); 
$result = $sql->execute(array(
        ':fullname' => $_GET['fullname'], 
        ':email' => $_GET['email'], 
        ':username' => $_GET['username'], 
        ':password' => $password_md5, 
        ':password_plain' => $_GET['password'])); 
+1

Bitte nicht __roll Ihr own__ Passwort-Hashing. PHP bietet [ 'password_hash()'] (http://php.net/manual/en/function.password-hash.php) und [ 'password_verify()'] (http://php.net/manual/ en/function.password-verify.php) benutze sie bitte. Und hier sind einige [gute Ideen über Passwörter] (https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet) Wenn Sie eine PHP-Version vor 5.5 verwenden [gibt es ein Kompatibilitätspaket hier] (https : // GitHub.com/ircmaxell/password_compat) – RiggsFolly

Antwort

22

Dumping Wenn PDO Anweisung FALSE zurückgibt, bedeutet dies, dass Abfrage fehlgeschlagen. Sie müssen PDO im richtigen Fehlermeldungsmodus einstellen, um den Fehler zu erkennen.

setzen Sie diese Zeile im Code direkt nach

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

Nachdem ich die Fehlermeldung verbinden, müssen Sie es lesen und zu verstehen. Es klingt zu offensichtlich, aber Lernende übersehen häufig die extreme Hilfsbereitschaft der Fehlermeldung. Die meiste Zeit erklärt es das Problem ziemlich einfach. Sagen Sie, wenn es heißt, dass eine bestimmte Tabelle nicht existiert, müssen Sie Rechtschreibung, Tippfehler, Groß-/Kleinschreibung, Anmeldeinformationen und dergleichen überprüfen. Oder, wenn es heißt, dass ein Fehler in der SQL-Syntax vorliegt, müssen Sie Ihre SQL überprüfen. Und das Problem vor Ort ist richtig vor die Abfrage an dem Fehler messaage zitiert.

Sie müssen auch vertrauen die Fehlermeldung. Wenn er sagt, dass Anzahl von Token nicht Anzahl der gebundenen Variablen überein dann es ist so. Gleiches gilt für nicht vorhandene Tabellen oder Spalten. Gegeben die Wahl, ob es dein eigener Fehler ist oder die Fehlermeldung falsch ist, bleibe immer beim ersteren. Wieder klingt es herablassend, aber Hunderte von Fragen auf dieser Seite beweisen, dass diese Ratschläge äußerst nützlich sind.


Beachten Sie, dass Sie PHP-Fehler im Allgemeinen sehen können, um PDO-Fehler zu sehen. Um dies zu tun, müssen Sie konfigurieren PHP ist abhängig von der Site-Umgebung:

  • auf einem Entwicklung Server ist es sehr praktisch ist, Fehler direkt auf dem Bildschirm haben, für die angezeigten Fehler gedreht wird auf:

    error_reporting(E_ALL); 
    ini_set('display_errors',1); 
    
  • , während auf einer Live Website haben alle Fehler angemeldet sein, aber nie an den Client angezeigt. Dazu konfigurieren PHP auf diese Weise:

    error_reporting(E_ALL); 
    ini_set('display_errors', 0); 
    ini_set('log_errors', 1); 
    

Beachten Sie, dass error_reporting sollte E_ALL die ganze Zeit eingestellt werden.

Beachten Sie auch, dass trotz der gemeinsamen Wahn, no try-catch have to be used for the error reporting. PHP meldet Ihnen bereits PDO-Fehler und in einer besseren Form. Eine nicht abgefangene Ausnahme ist sehr gut für die Entwicklung. Wenn Sie jedoch eine benutzerdefinierte Fehlerseite anzeigen möchten, verwenden Sie try catch immer noch nicht, sondern nur set custom error handler. Kurz gesagt, Sie müssen PDO-Fehler nicht als etwas Besonderes behandeln, sondern betrachten sie als jeden anderen Fehler in Ihrem Code.

+3

Wie beantwortet das die OP-Frage? – NaijaProgrammer

+1

Danke. Ich habe einen Katalogfehler gefunden und debugge jetzt. – Rifthy

+3

@NaijaProgrammer id nicht, aber es könnte ihn/sie führen, um die Antwort basierend auf der Fehlermeldung von "Your Common Sense" vorgeschlagen .. – DTH