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.

5voto

Omdev Punkte 93

Prüfen Sie zunächst Ihre Verbindung.

Wenn Sie dann den genauen Wert aus der Datenbank abrufen wollen, sollten Sie schreiben:

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

Oder Sie wollen die LIKE Typ des Wertes, dann sollten Sie schreiben:

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

3 Stimmen

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

5voto

user28864 Punkte 3205

Sie können auch prüfen, ob $result scheitert vor der Ausführung des Fetch-Arrays wie folgt

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');
if(!$result)
{
     echo "error executing query: "+mysql_error(); 
}else{
       while($row = mysql_fetch_array($result))
       {
         echo $row['FirstName'];
       }
}

3 Stimmen

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

0 Stimmen

Aber wenn der Code funktioniert, sollten Sie den Code bearbeiten und die benötigten Filter eingeben, anstatt den Code zu kritisieren.

0 Stimmen

Die einfache Verwendung von Filtern wird den Fehler in diesem Code nicht beheben. Die beste Lösung ist die Verwendung von vorbereiteten/parametrisierten Abfragen mit PDO oder ähnlichem. Ich sehe keinen Sinn darin, das Problem zu beheben, da die richtige Antwort bereits hier gepostet wurde. Im Idealfall wird diese Antwort gelöscht werden. Sie können Ihre Antwort jedoch gerne korrigieren und ich werde sie gerne hochstufen, wenn sie korrekt ist.

3voto

Normalerweise tritt ein Fehler auf, wenn die Datenbankverbindung fehlschlägt. Stellen Sie also sicher, dass Sie Ihre Datenbank verbinden oder die Datenbankdatei einbinden.

include_once(db_connetc.php');

OU

// Create a connection
$connection = mysql_connect("localhost", "root", "") or die(mysql_error());

//Select database
mysql_select_db("db_name", $connection) or die(mysql_error());

$employee_query = "SELECT * FROM employee WHERE `id` ='".$_POST['id']."'";

$employee_data = mysql_query($employee_query);

if (mysql_num_rows($employee_data) > 0) {

    while ($row = mysql_fetch_array($employee_data)){
        echo $row['emp_name'];
    } // end of while loop
} // end of if
  • Am besten führen Sie die Abfrage in sqlyog aus und kopieren sie dann in Ihren Seitencode.
  • Speichern Sie Ihre Abfrage immer in einer Variablen und geben Sie dann ein Echo auf diese Variable. Dann übergeben Sie an mysql_query($query_variable); .

2 Stimmen

1) Sie wissen nicht, ob ich für eine Antwort gestimmt habe oder nicht, ob ich für oder gegen eine Antwort gestimmt habe. 2) Wie ich in meinem ersten Kommentar erklärt habe, bezieht sich Ihre Antwort nicht auf das Problem ( boolescher Wert, der an mysql_fetch_array übergeben wird ) und Sie haben Syntaxfehler

2 Stimmen

In Ihren beiden Codebeispielen sind die Anführungszeichen falsch. Die Syntaxhervorhebung, die auf Ihren zweiten Codeblock angewendet wird, ist ein eindeutiges Indiz dafür, dass etwas nicht stimmt

4 Stimmen

Dieser Code ist anfällig für SQL-Injection und sollte nicht verwendet werden. @EngrZardari wenn Sie diesen Code auf Ihren Produktionssystemen verwenden, sind Sie zweifellos gehackt worden und sollten die Situation beheben, indem Sie vorbereitete/parametrisierte Abfragen mit PDO oder ähnlichem verwenden. Es gibt Bots, die automatisch auf solche Schwachstellen testen.

2voto

Paul Spiegel Punkte 29427

Traditionell ist PHP tolerant gegenüber schlechten Praktiken und Fehlern im Code, was die Fehlersuche ziemlich erschwert. Das Problem in diesem speziellen Fall ist, dass sowohl mysqli y PDO sagen Ihnen standardmäßig nicht, wenn eine Abfrage fehlgeschlagen ist und geben nur FALSE . (Ich werde nicht über die deprivierten mysql erweiterung. Die Unterstützung für vorbereitete Erklärungen ist Grund genug, entweder zu PDO o mysqli .) Aber Sie können das Standardverhalten von PHP so ändern, dass es immer einen Ausnahmen wenn eine Abfrage fehlschlägt.

Für PDO : Verwenden Sie $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

error_reporting(E_ALL);

$pdo = new PDO("mysql:host=localhost;dbname=test", "test","");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$result = $pdo->query('select emal from users');
$data = $result->fetchAll();

Dies zeigt Ihnen Folgendes an:

Fataler Fehler: Ungefangene Ausnahme 'PDOException' mit der Meldung 'SQLSTATE[42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'emal' in 'field list'' in E:\htdocs\test\mysql_errors\pdo.php in Zeile 8

PDOException: SQLSTATE[42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'emal' in 'field list' in E:\htdocs\test\mysql_errors\pdo.php in Zeile 8

Wie Sie sehen, wird Ihnen genau gesagt, was mit der Abfrage nicht stimmt und wo Sie das Problem in Ihrem Code beheben müssen.

Ohne $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); erhalten Sie

Fataler Fehler: Aufruf einer Memberfunktion fetchAll() auf boolean in E:\htdocs\test\mysql_errors\pdo.php in Zeile 9

Für mysqli : Verwenden Sie mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

error_reporting(E_ALL);

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'test', '', 'test');

$result = $mysqli->query('select emal from users');
$data = $result->fetch_all();

Sie erhalten

Fataler Fehler: Ungefangene Ausnahme 'mysqli_sql_exception' mit der Meldung 'Unbekannte Spalte 'emal' in 'Feldliste'' in E:\htdocs\test\mysql_errors\mysqli.php in Zeile 8

mysqli_sql_exception: Unbekannte Spalte 'emal' in 'Feldliste' in E:\htdocs\test\mysql_errors\mysqli.php in Zeile 8

Ohne mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); erhalten Sie nur

Fataler Fehler: Aufruf einer Memberfunktion fetch_all() auf boolean in E:\htdocs\test\mysql_errors\mysqli.php in Zeile 10

Sie können die MySQL-Fehler natürlich auch manuell überprüfen. Aber ich würde verrückt werden, wenn ich das jedes Mal tun müsste, wenn ich einen Tippfehler mache - oder noch schlimmer - jedes Mal, wenn ich die Datenbank abfragen will.

1voto

Ritesh d joshi Punkte 793

Probieren Sie diesen Code aus, er funktioniert einwandfrei

die Variable post der Variablen

   $username = $_POST['uname'];

   $password = $_POST['pass'];

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

if(!empty($result)){

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

3 Stimmen

Dieser Code ist anfällig für SQL-Injection-Angriffe 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