Fatal error: Call to a member function execute() on a non-object

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Fatal error: Call to a member function execute() on a non-object

    Hallo,

    ich versuche mich gerade in Objektorientierter Programmierung mit mysqli.
    Leider beiße ich mir bei folgendem Problem die Zähne aus, hab schon das Manual durchgelesen, aber ich komm einfach nicht auf die Lösung!

    Der Code liest aus einer Highscore-Tabelle die 20 besten Ergebnisse aus, ausgesucht nach kürzest benötigter Zeit und am wenigsten benötigste Klicks, wobei Zeit das erste Kriterium ist.
    Das heißt, zunächst selektiere ich aus den 20 besten Datensätzen (nach kürzester Zeit) den Datensatz mit dem höchsten Zeitwert (query1).

    Dann will ich von genau diesem Datensatz auch den Klickwert haben (query2).

    Und hier ist der Fehler: Fatal error: Call to a member function execute() on a non-object in dieser Zeile

    PHP-Code:
    $query2->execute(); 
    Der gesamte Code sieht so aus:

    PHP-Code:
    $this->db_handle = new mysqli(meine Daten);

    $highScoreTime "SELECT MAX(playerTime) FROM
                            ( SELECT playerTime FROM `highscore` 
                              ORDER BY playerTime ASC, playerClicks ASC 
                              LIMIT 20 ) as bestTime"
    ;

            
    $query1 $this->db_handle->prepare($highScoreTime);
    $query1->execute();
    $query1->bind_result($maxTime);
    $query1->fetch();
    $query1->close();
            
    $highScoreClicks "SELECT MAX(playerClicks) `highscore` 
                                WHERE playerTime='
    $maxTime' as bestClicks";
            
    $query2 $this->db_handle->prepare($highScoreClicks);
    $query2->execute();
    $query2->bind_result($maxClicks);
    $query2->fetch();
    $query2->close(); 
    Ich wär euch wirklich dankbar, wenn ihr mir den korrekt lautenden Code posten könntet, hab schon so viele Varianten durch, aber es will einfach nicht!

    Danke euch!
    Grüße,
    Susi

  • #2
    Hallo Susi,

    im zweiten SQL-Befehl fehlt "from" vor 'highscore'. Liegt es daran?

    Viele Grüße
    Christian
    C. Berens - Webentwickler

    Kommentar


    • #3
      Hoi, danke für den Hinweis, gleich mal korrigiert - aber leider immer noch die gleiche Fehlermeldung :-(

      Kommentar


      • #4
        Versuch mal, den Ausdruck 'as bestClicks' nach MAX(playerClicks) zu setzen
        C. Berens - Webentwickler

        Kommentar


        • #5
          Leider bringt auch das nicht den gewünschten Erfolg...

          Kommentar


          • #6
            Wenn man die Funktion prepare mit einer PHP-Variablen (hier: $maxTime) im Query-String verwenden möchte, muss man im SQL-Statement ein ? setzten und zusätzlich die Funktion bind_param() verwenden.

            Siehe: PHP: mysqli_stmt:repare - Manual (Beispiel 1)
            C. Berens - Webentwickler

            Kommentar


            • #7
              Es wollte einfach nicht, auch nicht mit ? und bind_param().

              Hab es nun anders gelöst, ob das nun unsauberer ist, weiß ich auch nicht...

              PHP-Code:
              $this->db_connect();
                      
              $highScoreEntries "SELECT playerTime, playerClicks 
                                           FROM `highscore`
                                           ORDER BY playerTime ASC, playerClicks ASC
                                           LIMIT 0,20"
              ;
                      
                      
              $query $this->db_handle->prepare($highScoreEntries);
                      
              $query->execute();
                      
              $query->bind_result($playerTime$playerClicks);
                      while(
              $query->fetch()) {
                          
              $lastPlayerTime $playerTime;
                          
              $lastPlayerClicks =  $playerClicks;
                      } 
              Danke trotzdem für die Mühen

              Kommentar

              Lädt...
              X