PHP Fatal error: Uncaught Error: Call to a member function fetch_object() on boolean in

  • Wanneer op de zoekpagina wil zoeken krijg ik de volgende error PHP Fatal error: Uncaught Error: Call to a member function fetch_object() on boolean in regel 329. Regel 329 is bij mij



    PHP
    $display['thumbnail'] .=' <ul class="search-row" >';
     while($row =  $result->fetch_object())

    Ik begrijp niet wat er met de error bedoelt word. Kan iemand mij dat misschien uitleggen?


    Alvast bedankt

  • Misschien kun je laten zien wat de functie `fetch_object` doet. Volgens de standaard PHP documentatie zou deze eventueel NULL of een object terug moeten geven.


    Ik vermoed dat je er zelf iets van maakt en dat het daar verkeerd gaat.


    Wanneer mogelijk zou de query ook handig zijn om te zien, dan hebben we helemaal een mooi beeld.

  • Misschien handig om even te melden dat je ook op PHPhulp dit topic hebt gestart!


    Het zou een beetje jammerlijk zijn als iemand hier een zelfde advies geeft als daar, en dat discussies langs elkaar lopen. Of dat het antwoord opgelost is, terwijl daar nog mensen mee staan staan te denken.

  • Ik begrijp niet wat er met de error bedoelt word. Kan iemand mij dat misschien uitleggen?

    Een soortgelijke foutmelding wordt hier uit de doeken gedaan. PHP is eigenlijk best wel superduidelijk wat betreft foutmeldingen. Het is gewoon een kwestie van het kruimelpad volgen. En gewoon woord voor woord lezen wat er staat.


    Volledigheidshalve hier ook een breedsprakige variant van de bovenstaande melding.


    Er staat:

    PHP Fatal error: Uncaught Error: Call to a member function fetch_object() on boolean in regel 329.

    Oftewel: in eerste optiek gaat er dus iets mis met fetch_object(). Je eerste stap zou dan ook het er bijpakken van de documentatie moeten zijn. De functie/methode verwacht een object van de klasse mysqli_result, maar kreeg in plaats hiervan een Boolse waarde (true of false).


    Conclusie: de code liep dus stuk omdat de parameter niet het juiste type had.


    Nu weten we dus waardoor de fout werd veroorzaakt, en pas vanaf dat moment kun je gaan werken naar een oplossing. Immers, als je niet weet wat er fout gaat, wat ben je dan aan het oplossen?


    Dus, op de plek waar je een mysqli_result-object zou verwachten stond een Boolean. Hoe kan dit? $result was het resultaat van het uitvoeren van de query()-methode. We pakken de documentatie er weer bij. We zijn geïnteresseerd in het resultaat, dit staat in de functie/methode definitie:

    Return Values
    Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.

    Oftewel, of de query was geen SELECT-query, in welk geval je ook geen resultaten op kunt halen, ofwel de query was syntactisch incorrect (had niet de juiste vorm) kon niet worden uitgevoerd, bijvoorbeeld omdat deze niet juist was geformatteerd.


    En om dat op te lossen, zou je je query moeten debuggen.


    Het interpreteren van dit soort foutmeldingen omvat dus twee stappen:

    1. lees wat er staat, en loop hier stap voor stap doorheen
    2. Read The Flipping Manual

    Nota Bene: de topicstarter vroeg uitleg over de foutmelding. Wat je vervolgens moet doen om deze foutmelding te doen laten verdwijnen is vers twee. Hiertoe moet je eerst weten wat er precies aan de hand is.

  • Ik miste een $db

    Ik heb hier nog even over nagedacht, en ik denk dat dat niet kan kloppen. Als dat namelijk het geval was, dan zou $db->query() in eerste instantie stuk moeten lopen met een foutmelding als "Fatal error: Uncaught Error: Call to a member function query() on something".


    Echter, de code liep vast op fetch_object() met een melding die het sterke vermoeden wekt dat je zoekquery $query (soms, maar mogelijk niet altijd) een onjuist format heeft.


    Daarom blijf ik dus bij mijn eerdere conclusie op grond van de door jouw verschafte code. Misschien was je hier inmiddels mee aan het schuiven geweest, maar als je een foutmelding opgeeft die niet bij een codefragment hoort, of vice versa, dan is het vrijwel onmogelijk om op grond hiervan te zeggen wat er daadwerkelijk mis is...

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!