Wie soll ich diesen Fehler beheben?

  • Warnung: Es wird versucht, auf den Array-Offset für einen Wert vom Typ Null in C:\xampp\htdocs\edoc\patient\schedule.php in Zeile 45 zuzugreifen


    Warnung: Es wird versucht, auf den Array-Offset für einen Wert vom Typ Null in C:\xampp\htdocs\edoc\patient\schedule.php in Zeile 46 zuzugreifen

    -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---


    Hier ist der Code, der den Fehler anzeigt:


    //Datenbank importieren


    include("../connection.php");


    $sqlmain= "select * from patient where pemail=?";


    $stmt = $database->prepare($sqlmain);


    $stmt->bind_param("s",$useremail);


    $userrow = $database->query("select * from doctor where docemail='$useremail'");


    $userfetch=$userrow->fetch_assoc();


    $userid= $userfetch["pid"];-----------------------------------(Zeile 45)


    $username=$userfetch["pname"];----------(Zeile 46)


    $stmt->execute();


    $result = $stmt->get_result();


    Ich habe den gleichen Code auch in einem anderen Projekt und er funktioniert einwandfrei, nur in diesem wird ein Fehler angezeigt

  • Stimmen die Namen pid, pname, doctor und docemail?


    Vermutlich geht

    Code
    $userrow = $database->query("select * from doctor where docemail='$useremail'");

    in die Hose, also frage die Datenbank, ob es einen Fehler gibt.


    Beim Einsatz von SQL-Datenbanken sollte das Abrufen aller Spalten eines Datensatzes per SELECT * vermieden werden. Stattdessen sollten die gewünschten Spaltennamen explizit aufgelistet werden (SELECT col1, col2 FROM …). Einige Vorteile:


    Häufig werden in einer Abfrage nicht alle Spalten benötigt, die aktuell existieren oder in Zukunft existieren könnten, sodass unnötige Daten übertragen werden.

    Bei expliziter Angabe der gewünschten Spalten können Datenbanksysteme unter Umständen Indizes zur Beantwortung von Abfragen nutzen.

    Eine Auflistung der Spaltennamen macht den Code verständlicher, da die Tabellenstruktur nicht erst im Datenbankschema nachgelesen werden muss.

    Bei Änderungen am Datenbankschema (etwa bei Entfernung oder Umbenennung einer Spalte) schlägt eine Query, die kein SELECT * nutzt, sofort fehl. Das ist hilfreich, da so keine Stelle im Code übersehen werden kann, an der wahrscheinlich auch die PHP-Datenstrukturen an das neue Schema angepasst werden müssen.

  • Beim Einsatz von SQL-Datenbanken sollte das Abrufen aller Spalten eines Datensatzes per SELECT * vermieden werden. […]

    Völlig richtig, das größere Problem an der Codezeile ist allerdings die fehlende Behandlung des Kontextwechsels, so ist der Code gefährlich! Direkt davor ist ja anscheinend noch klar wie das richtig geht, da werden prepared Statements verwendet (wenn auch das Ergebnis der Abfrage nicht abgeholt wird) …

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!