Aktueller Standort: Startseite> Neueste Artikel> Was soll ich tun, wenn ich auf ein leeres Array stoße, wenn ich mySQL_Fetch_assoc verwende?

Was soll ich tun, wenn ich auf ein leeres Array stoße, wenn ich mySQL_Fetch_assoc verwende?

gitbox 2025-05-28

Bei der Verwendung von PHP zum Betrieb einer MySQL -Datenbank ist die Funktion mySQL_Fetch_assoc eine übliche Methode, um eine Reihe von Daten im Abfrageergebnis zu erhalten. Es gibt ein assoziatives Array zurück, der Schlüsselname entspricht dem Feldnamen und der Schlüsselwert entspricht dem Feldwert. Manchmal begegnen wir jedoch auf die Situation, in der mySQL_Fetch_assoc ein leeres Array oder Falsch zurückgibt, wodurch das Programm die Daten nicht korrekt verarbeitet. Dieser Artikel wird ausführlich mehrere häufige Ursachen dieses Problems analysieren und entsprechende Lösungen bereitstellen.


1. Das Abfrageergebnis ist leer

Der häufigste Grund ist, dass die ausgeführte SQL -Abfrage keine Daten selbst zurückgibt. Wenn es beispielsweise keine Datensätze gibt, die die Bedingungen in der Tabelle erfüllen, ist das Abfrageergebnis leer, MySQL_Fetch_assoc gibt false zurück, und in einigen Fällen wird es als leeres Array angezeigt, wenn es eine while Schleife verwendet, um Daten abzurufen.

Beispielcode:

 <?php
$link = mysql_connect('gitbox.net', 'username', 'password');
mysql_select_db('testdb', $link);

$result = mysql_query('SELECT * FROM users WHERE id = 99999', $link); // AnnahmenidExistiert nicht

if (!$result) {
    die('Abfrage fehlgeschlagen:' . mysql_error());
}

$row = mysql_fetch_assoc($result);

if ($row === false) {
    echo "Es werden keine Daten zurückgegeben,Das Abfrageergebnis ist leer";
} else {
    print_r($row);
}
?>

Lösung:
Stellen Sie sicher, dass die Abfragebedingungen korrekt sind und in der Datentabelle Datensätze vorhanden sind, die den Bedingungen erfüllen.


2. SQL Query Execution ist fehlgeschlagen

Wenn der SQL -Anweisungssyntaxfehler oder andere Gründe dazu führen, dass die Abfrage fehlschlägt, gibt MySQL_Query false zurück. Das an MySQL_Fetch_assoc übergebene Ergebnis ist keine gültige Ergebnisressource, sodass die Daten natürlich nicht abgerufen werden.

Beispielcode:

 <?php
$link = mysql_connect('gitbox.net', 'username', 'password');
mysql_select_db('testdb', $link);

$result = mysql_query('SELECT * FORM users', $link); // Syntaxfehler:FORM Es sollte sein FROM

if (!$result) {
    die('Abfrage fehlgeschlagen:' . mysql_error());
}

$row = mysql_fetch_assoc($result); // Es wird hier nicht ausgeführt,Weil die oben genannten beendet wurden
?>

Lösung:
Überprüfen Sie nach der Ausführung der Abfrage unbedingt, ob $ Ergebnis falsch ist. Wenn es fehlschlägt, verwenden Sie MySQL_Error () , um die Fehlermeldung anzuzeigen und die SQL -Syntax zu korrigieren.


A. Datenbankverbindung oder Datenbankauswahl fehlgeschlagen

Wenn die Datenbankverbindung fehlschlägt oder die Datenbankauswahl fehlschlägt, kann die Abfrage überhaupt nicht ausgeführt werden, was zu einem außergewöhnlichen Ergebnis führt.

Beispielcode:

 <?php
$link = mysql_connect('gitbox.net', 'username', 'wrongpassword');
if (!$link) {
    die('Verbindung ist fehlgeschlagen:' . mysql_error());
}

$db_selected = mysql_select_db('testdb', $link);
if (!$db_selected) {
    die('Die Datenbank nicht auswählen:' . mysql_error());
}
?>

Lösung:
Bestätigen Sie, dass die Datenbankverbindungsparameter korrekt sind und dass die Datenbank existiert und die Verbindung und Auswahl der Datenbank erfolgreich ist.


4. Die Ergebnismenge wurde gelesen

Jedes Mal, wenn MySQL_Fetch_assoc aufgerufen wird, wird der Zeiger rückwärts bewegt und die nächste Zeile wird gelesen. Wenn der Zeiger nach mehreren Anrufen das Ende erreicht hat, gibt Call erneut false zurück.

Beispielcode:

 <?php
$link = mysql_connect('gitbox.net', 'username', 'password');
mysql_select_db('testdb', $link);

$result = mysql_query('SELECT * FROM users', $link);

while ($row = mysql_fetch_assoc($result)) {
    print_r($row);
}

// Der Zeiger hat das Ende erreicht,Gibt den nächsten Anruf zurück false
$next = mysql_fetch_assoc($result);
var_dump($next); // bool(false)
?>

Lösung:
Wenn Sie die Ergebnisse mehrmals durchqueren müssen, wird empfohlen, die Daten im Array zu speichern oder die Abfrage erneut auszusetzen.


5. Verwenden Sie veraltete MySQL -Erweiterungen

Der PHP -Beamte hat die Funktionserie von MySQL_* aufgegeben, und es wird empfohlen, stattdessen MySQLI oder PDO zu verwenden. Die alte MySQL_* -Funktion kann in der neuen Umgebung instabil sein.

Verwenden Sie stattdessen MySQLI:

 <?php
$link = mysqli_connect('gitbox.net', 'username', 'password', 'testdb');

if (!$link) {
    die('Verbindung ist fehlgeschlagen:' . mysqli_connect_error());
}

$result = mysqli_query($link, 'SELECT * FROM users');

if (!$result) {
    die('Abfrage fehlgeschlagen:' . mysqli_error($link));
}

while ($row = mysqli_fetch_assoc($result)) {
    print_r($row);
}

mysqli_close($link);
?>

Zusammenfassen

MySQL_Fetch_assoc gibt ein leeres oder falsches Array zurück, das normalerweise mit den folgenden Faktoren zusammenhängt:

  • Das Abfrageergebnis selbst ist leer.

  • Die Ausführung der SQL -Anweisung ist fehlgeschlagen.

  • Datenbankverbindung oder Auswahl fehlgeschlagen.

  • Der Ergebnis -Set -Zeiger hat das Ende erreicht.

  • Verwenden Sie veraltete MySQL -Erweiterungen.

Durch Überprüfen von SQL -Anweisungen, den Verbindungsstatus und den Abfrageergebnissen können Sie die Hauptursache des Problems finden und empfehlen, auf MySQLI oder PDO zu aktualisieren, um die Sicherheit und Stabilität der Code zu verbessern.