1002 Stimmen

mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows usw... erwartet, dass Parameter 1 eine Ressource ist

Ich versuche, Daten aus einer MySQL-Tabelle auszuwählen, aber ich erhalte eine der folgenden Fehlermeldungen:

mysql_fetch_array() erwartet, dass Parameter 1 eine Ressource ist, die boolesch ist

Dies ist mein Code:

$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

while($row = mysql_fetch_array($result)) {
    echo $row['FirstName'];
}

15 Stimmen

Sie können weitere nützliche eroor msg erhalten, indem Sie:: QUERY oder die(mysql_error());

124 Stimmen

Auch der obligatorische Hinweis: Ihr Code ist anfällig für SQL-Einschleusung . Sie sollten die Benutzereingaben validieren und/oder ausblenden. Werfen Sie einen Blick auf mysql_real_escape_string . Vertrauen Sie niemals auf Benutzerdaten.

7 Stimmen

Eigentlich wird der Code des OPs einen Syntaxfehler auf dem MySQL-Server verursachen, aber zumindest ist er pas anfällig für SQL Injection, da bei einfachen Anführungszeichen keine Variableninterpolation möglich ist.

27voto

kolexinfos Punkte 968

Wenn Sie alles ausprobiert haben und es nicht funktioniert, sollten Sie die Kollation Ihrer MySQL-Datenbank überprüfen. Meine war auf eine schwedische Sortierreihenfolge eingestellt. Dann habe ich sie geändert in utf8_general_ci und alles ging wie von selbst.

24voto

Amjad Omari Punkte 1114

Versuchen Sie dies, es muss funktionieren, andernfalls müssen Sie den Fehler ausdrucken, um Ihr Problem zu spezifizieren

$username = $_POST['username'];
$password = $_POST['password'];

$sql = "SELECT * from Users WHERE UserName LIKE '$username'";
$result = mysql_query($sql,$con);

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

8 Stimmen

1) ist sehr anfällig für SQL-Injektionen, 2) enthält keine Fehlerbehandlung, die im Fall des Auftraggebers den Fehler verursacht.

0 Stimmen

+1. @deceze Ja, es ist weit offen. Aber nicht mehr als der Code des Auftraggebers oder des akzeptierten Antwortenden ;-) Und es ist nicht das Fehlen von Fehlern. Umgang mit im Code des Auftraggebers, der den Fehler verursacht... es ist der Fehler und diese Antwort versucht zumindest, dies zu beheben (indem sie einfache Anführungszeichen um das String-Literal in der LIKE Ausdruck).

1 Stimmen

+1 Bitte fügen Sie ein Leerzeichen zwischen LIKE und '$username' ein, der Rest scheint bis auf die SQL-Injection in Ordnung zu sein. Warum nicht = anstelle des LIKE-Operators verwenden Benutzername muss genau übereinstimmen

24voto

Gears.of.Codes Punkte 267
$query = "SELECT Name,Mobile,Website,Rating FROM grand_table order by 4";

while( $data = mysql_fetch_array($query))
{
    echo("<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]</td><td>$data[3]</td></tr>");      
}

Anstelle einer WHERE-Abfrage können Sie auch diese ORDER BY-Abfrage verwenden. Sie ist weitaus besser als diese für die Verwendung einer Abfrage.

Ich habe diese Abfrage durchgeführt und erhalte keine Fehler wie Parameter oder Boolean.

0 Stimmen

Denken Sie an die Verwendung von htmlspecialchars() bei der Verwendung beliebiger Daten im Kontext von HTML. Andernfalls riskieren Sie, gültiges HTML zu erstellen, wenn reservierte Zeichen in den Daten verwendet werden.

20voto

asim-ishaq Punkte 2170

Dafür könnte es zwei Gründe geben:

  1. Haben Sie die Verbindung zur Datenbank geöffnet, bevor Sie die Funktion mysql_query aufrufen? Ich kann das in Ihrem Code nicht erkennen. Verwenden Sie mysql_connect, bevor Sie die Abfrage machen. Siehe php.net/manual/en/function.mysql-connect.php

  2. Die Variable $Benutzername wird innerhalb einer einfachen Anführungszeichenfolge verwendet, so dass ihr Wert innerhalb der Abfrage nicht ausgewertet wird. Die Abfrage wird definitiv fehlschlagen.

Drittens: Die Struktur der Abfrage ist anfällig für SQL-Einschleusung . Sie können vorbereitete Anweisungen verwenden, um dieses Sicherheitsrisiko zu vermeiden.

19voto

ravi Punkte 417

Probieren Sie den folgenden Code aus. Er könnte gut funktionieren.

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName ='$username'");

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

4 Stimmen

Dieser Code ist anfällig für SQL-Injection und sollte nicht verwendet werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X