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.

41voto

yasin Punkte 451

Bitte überprüfen Sie, ob die ausgewählte Datenbank nicht ausgewählt ist, denn manchmal ist die Datenbank nicht ausgewählt.

Siehe

mysql_select_db('database name ')or DIE('Database name is not available!');

vor der MySQL-Abfrage und gehen Sie dann zum nächsten Schritt

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

f($result === FALSE) {
    die(mysql_error());

40voto

Chaitannya Punkte 936

Ihr Code sollte in etwa so aussehen

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

if($result === FALSE) {
    die(mysql_error("error message for the user")); 
}

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

Danach erhalten Sie die Abfrage auf dem Bildschirm. Probieren Sie diese Abfrage auf Ihrem Server aus und sehen Sie, ob sie die gewünschten Ergebnisse liefert. In den meisten Fällen liegt der Fehler in der Abfrage. Der Rest des Codes ist korrekt.

3 Stimmen

Verwenden Sie diesen Code nicht. Er ist sehr anfällig für SQL-Injection-Angriffe.

33voto

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

Sie definieren die Zeichenkette mit einfachen Anführungszeichen und PHP analysiert keine durch einfache Anführungszeichen begrenzten Zeichenketten. Um eine variable Interpolation zu erhalten, müssen Sie doppelte Anführungszeichen ODER String-Verkettung (oder eine Kombination davon) verwenden. Siehe http://php.net/manual/en/language.types.string.php für weitere Informationen.

Außerdem sollten Sie überprüfen, ob mysql_query eine gültige Ergebnis-Ressource zurückgegeben hat, da sonst fetch_*, num_rows, etc. nicht mit dem Ergebnis funktionieren, da es kein Ergebnis ist! IE:

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

if( $result === FALSE ) {
   trigger_error('Query failed returning error: '. mysql_error(),E_USER_ERROR);
} else {
   while( $row = mysql_fetch_array($result) ) {
      echo $row['username'];
   }
}

http://us.php.net/manual/en/function.mysql-query.php für weitere Informationen.

2 Stimmen

Verwenden Sie diesen Code nicht, auch wenn Sie Anführungszeichen hinzufügen. Er ist sehr anfällig für SQL-Injection-Angriffe.

32voto

Enis P. Aginić Punkte 925

Diese Abfrage sollte funktionieren:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");
while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

Das Problem sind die einfachen Anführungszeichen, weshalb Ihre Abfrage fehlschlägt und FALSE zurückgibt und Ihre WHILE-Schleife nicht ausgeführt werden kann. Mit % können Sie alle Ergebnisse abgleichen, die Ihre Zeichenfolge enthalten (z. B. SomeText-$username-SomeText).

Dies ist einfach eine Antwort auf Ihre Frage, Sie sollten Dinge implementieren, die in den anderen Beiträgen erwähnt wurden: Fehlerbehandlung, Verwendung von Escape-Zeichenfolgen (Benutzer können alles in das Feld eingeben, und Sie MÜSSEN sicherstellen, dass es kein beliebiger Code ist), Verwendung von PDO stattdessen mysql_connect, das jetzt aus dem Verkehr gezogen ist.

27voto

Dip Pokhrel Punkte 497
$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'") or die(mysql_error());

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

Manchmal wird die Abfrage unterdrückt als @mysql_query(your query);

3 Stimmen

Verwenden Sie diesen Code nicht. Er ist sehr anfällig für SQL-Injection-Angriffe.

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