2016-08-29 6 views
0

Ich bin ein Anfänger im Webdesign, und ich habe dieses Problem. Ich versuche, eine Login-Seite zu erstellen, aber wenn ich versuche, das Login zu erstellen wirft es einen Fehler wie folgt:PHP und mysql seltsame Fehler mit Auswahl

SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax ; Sie in die Bedienungsanleitung zu Ihrer MySQL-Server-Version für die richtige Syntax entspricht in der Nähe zu verwenden ': Benutzername und PasswordHash =: passwordhashed)' at line 1

Mit PHP-Code von

Try { 
// $SQL = 'INSERT INTO Passwords (username, password, passwordhashed) VALUES (:username,:password,:passwordhashed);'; 
$username = $_REQUEST['username']; 
$password = $_REQUEST['password']; 
$PasswordHashed = sha1($password); 
echo "Username: ". $username ."<br> Password: ". $password . "<br> PasswordHashed: " . $PasswordHashed; 
$SQL = null; 
$SQL = "SELECT * FROM BlaBla WHERE (username=:username and passwordhash=:passwordhashed);"; 
$Statement = $MySQL->prepare($SQL); 
$Statement->bindValue(':username', $username); 
$Statement->bindValue(':passwordhashed', $PasswordHashed); 
$Statement->execute(); 
$Statement = $MySQL->query($SQL); 
if ($Statement->rowCount() < 1) { 
    echo 'NOPE'; 
} else { 
    echo 'welcome back '. $username; 
} 

} catch(PDOException $e) { 
$ErrorTitle = 'Error'; 
$Error = "error writing to database"; 
$ErrorInfo = '<p>Please contact administrator at [email protected]</p> <br> <p>'. $e->getMessage() . '</p>'; 
include './HTML/Error.php'; 
exit(); 
} 

I don‘ t wissen, was der Fehler ist. Könnte mir jemand helfen?

+2

@devlincarnate: das ist PDO. mysqli hat keine benannten Platzhalter. –

+3

Versuchen Sie, die letzte zu entfernen: '$ MySQL-> query ($ SQL)'. Sie haben die Anweisung bereits mit '$ MySQL-> execute()' ausgeführt. –

+2

$ Anweisung = $ MySQL-> Abfrage ($ SQL); –

Antwort

2

hier:

$Statement = $MySQL->prepare($SQL); 
    ^---your prepared statement 
$Statement->bindValue(':username', $username); 
$Statement->bindValue(':passwordhashed', $PasswordHashed); 
$Statement->execute(); 
$Statement = $MySQL->query($SQL); 
         ^----raw queries have no placeholders 

Sie eine Erklärung vorbereitet, und ausführen. Aber dann machen Sie eine RAW-Abfrage mit der gleichen SQL und ersetzen das Ergebnis der vorbereiteten Version. Sie können in einer solchen rohen Abfrage keine Platzhalter verwenden. Daher dein Fehler.

Dieser letzte -> query() Aufruf ist nutzlos und redundant.

+0

'near ': Benutzername und passwordhash =: passwordhashed)' at line 1' - das klingt für mich nicht nach $ $ Statement = $ MySQL-> query ($ SQL);' aber mehr wie sie sind wahrscheinlich mit mysqli_, um sich zu verbinden. Edit: Ok, ich habe mich geirrt. Das könnte auch ein mögliches Problem gewesen sein. –

+1

mysql meldet den ersten Platz, dass etwas keinen grammatikalischen Sinn machte, der Platzhalter ist. Da '-> query()' keine Platzhalter verwendet, ist der Platzhalter für den Benutzernamen die erste Stelle, an der die Abfrageanweisung keinen Sinn mehr findet. –

+0

Ja, ich kenne Marc. Aber ich habe meinen Kommentar über dem, den ich vorher gesehen habe, editiert, wo die Person mysqli benutzt, um sich zu verbinden, und dann mit PDO nachfragt. –

0

Das Problem gefunden. Problem war die Abfrage und Ausführung. Meine Schuld ist die Fehlerverfolgung.

+1

Sie haben es selbst gefunden? –