SQLSTATE[HY000]: General error mit PHP und PDO
Habe ich ein kleines login-Skript.
function login($sql) {
try {
$fbhost = "localhost";
$fbname = "foodbank";
$fbusername = "root";
$fbpassword = "";
$DBH = new PDO("mysql:host=$fbhost;dbname=$fbname",$fbusername,$fbpassword);
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$STH = $DBH->query($sql);
$STH->setFetchMode(PDO::FETCH_ASSOC);
session_start();
if ($row = $STH->fetch()) {
$_SESSION['username'] = "$row[username]";
header("Location:index.php");
}
} catch(PDOException $e) {
echo $e->getMessage();
}
}
BEARBEITET:
index.php
$sql = "SELECT username from users where username = ". $_POST['username'] ." AND password = ". $_POST['password'] ."";
login($sql);
Geändert von oben einzufügen, wählen Sie Abfrage. Nun bekomme ich eine neue Fehlermeldung:
SQLSTATE[42S22]: Column nicht found: 1054 Unknown column 'pvtpyro' in 'where-Klausel'
Was sind die Wert für $data und $sql ?
Ich Hinzugefügt mein code an der Unterseite
Bitte beachten Sie den edit in meiner Antwort. Verwenden Sie nicht die SELECT-Abfrage, die Sie zur Verfügung gestellt, da es nicht sicher vor SQL-injections.
Sollten Sie wirklich Bearbeiten diesem post zu entfernen, die SQL-injection aufm Kontoauszug als stef77 gesagt, wir wollen nicht, dass irgendjemand auf der Suche nach Hilfe zu kopieren, und verwenden Sie es.
Ich Hinzugefügt mein code an der Unterseite
Bitte beachten Sie den edit in meiner Antwort. Verwenden Sie nicht die SELECT-Abfrage, die Sie zur Verfügung gestellt, da es nicht sicher vor SQL-injections.
Sollten Sie wirklich Bearbeiten diesem post zu entfernen, die SQL-injection aufm Kontoauszug als stef77 gesagt, wir wollen nicht, dass irgendjemand auf der Suche nach Hilfe zu kopieren, und verwenden Sie es.
InformationsquelleAutor Brandi Evans | 2013-05-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf Ihrem neuesten edit: Sie können nicht abgerufen Ergebnisse mit PDO nach dem ausführen einer INSERT-Abfrage. Siehe hier: http://www.php.net/manual/en/pdostatement.fetch.php#105682
Edit: ich nehme an, da die Funktion nennt sich "login", Sie wollen so etwas wie $sql = "SELECT Passwort FROM users WHERE username = :username", dann Durchlaufen Sie die Ergebnisse mit der while-Schleife, und dann im log, wenn der Nutzer das Passwort passt?
Edit2: Basierend auf edit, um eine SELECT-Abfrage: VERWENDEN Sie NICHT DIESE ABFRAGE. Was Sie tun, ist NICHT SQL-injection-Beweis. Niemals verwenden Sie die Variablen aus Benutzereingaben (also $_POST, $_GET et al) und legen Sie Sie ungefiltert in eine SQL-Abfrage. Bitte mal den Begriff "prepared statements" hier bei ALSO oder Google.
Wie Sie sehen können, da Sie vergessen haben, setzen Sie einzelne Zecken (Apostrophe) vor und nach den Anführungszeichen, MySQL denkt, dass sich Ihre Eingabe bezieht sich auf eine andere Spalte ("pvtpyro") statt vergleichen Sie den Wert in der Spalte gegen einen string. Verwenden Sie IMMER das ":username", ":password" - syntax (mit vorangestellten Doppelpunkten) oder Ihre Anfragen werden unsicher und enorm gefährlich für Ihre Anwendung.
Sie sind herzlich willkommen! Ich könnte auch hinzufügen, den Hinweis, dass Sie sollten erwägen, den Austausch der while-Schleife mit einer einzigen ->fetch, da es keinen Sinn macht, die Sitzung mehrere Male, und senden Sie die Kopfzeile Lage, mehr als einmal. Natürlich, es entstehen keine Probleme, wenn der Benutzername ist einmalig in der Datenbank, aber Sie sollten ersetzen Sie die while-Schleife dennoch zu klären, Ihre Absicht (Sie wollen nicht kommunizieren "diese Protokolle in mehreren Nutzern", nehme ich an).
Ah ich sehe. Ok ich werde jetzt, vielen Dank nochmal!
sind Sie der Einreichung von Texten mit
'
(appostrophe) in IhnenNein, so weit text.
InformationsquelleAutor stef77
Den Konstruktor von PDO verwendet 2 Variablen, die nicht definiert sind in dem code, den Sie geliefert - $fbhost und $fbname.
EDIT:
Sie fordern
session_start()
innerhalb derwhile
Schleife, die Fehler verursachen können. Nehmen Sie es aus der Schleife.EDIT 2:
Sie sollten wirklich debug-code. Entweder über putting
die
in die verschiedenen code-Teile, die Ausgabe einige hilfreiche Informationen, kurz bevor (das ist die weniger bevorzugte Methode) ODER durch die Verwendung von xdebug und IDE, die es Ihnen erlauben, führen Sie Linie durch die Linie, und sehen den genauen Zustand der einzelnen Variablen und so.Oh, ich habe noch nie gehört von xdebug. Vielen Dank 🙂
InformationsquelleAutor Doron
Wenn ich undestand richtig
$data
$STH->execute($data);
sollte ein array sein, auch wenn der Wert eine. So, Sie können versuchen, zu ersetzen, die Abfrage mit$STH->execute(array($data));
bearbeitet:
Ändern Sie Ihre Zeilen an:
Ich habe meinen code oben, um zu zeigen, was passiert. Sollte ich noch hinzufügen, das array, wenn es weitergegeben wird?
Ja nur, es zu versuchen. Und was ist nach der
General error with
? Wir müssen sehen, voller Fehler codeDas ist es. Das ist alles was es sagt. Eigentlich ist das "mit" ist gar nicht da.
das hinzufügen der extra-array gibt mir diese Fehlermeldung: Notice: Array to string conversion in C:\xampp\htdocs\inc\foodbankdb.php auf der Linie 28 SQLSTATE[HY093]: Invalid parameter number: Anzahl der gebundenen Variablen entspricht nicht Anzahl der Token
InformationsquelleAutor samayo
Scheint mir, dass Sie keine Verbindung zu Ihrer Datenbank richtig... ich hatte diesen Fehler früher heute, und es war aus diesem Grund. Entweder das, oder Sie haben eine falsche Zeichenfolge
InformationsquelleAutor user2406160