2017-12-28 41 views
-1

Ich kann die Lösung nicht finden, aber Stunden der Fehlersuche verbringen. Frustration wächst stetig.PHP - Schwerwiegender Fehler: Uncaught Fehler: Aufruf einer Mitgliedsfunktion query() auf Null in

Das Problem: Ich versuche, nach dem Übertragen einer Webseite an einen neuen Anbieter, der die oop-Ansatz für MySQL-Schnittstellen benötigt, alle sql Befehlszeilen zurückzusetzen. Das funktioniert gut. Aber es gibt einen Teil, an dem ich nicht arbeiten kann. Die gerufene php-Datei movie.php wie folgt aussieht:

<?php 

    include 'scripts/init.php'; 

    ... 

    $cameraString = AssignPerson($movieID, 'camera'); 

?> 

die wichtige Bits von init.php sind:

<?php 
    session_start(); 

    include 'scripts/connect2SQL.php'; 
    include 'scripts/logInOut.php'; 
    include 'scripts/classes_functions.php'; 

?> 

Die connect2SQL.php

liest
<?php 

$connection2MySQL = mysqli_connect( "localhost" , "***" , "***", "***"); 
mysqli_query($connection2MySQL , "SET CHARACTER SET 'utf8'"); 
mysqli_query($connection2MySQL , "SET SESSION collation_connection ='utf8_unicode_ci'"); 

?> 

So ist die Variable $ connection2MySQL stellt die OOP-Verbindung zur Datenbank dar.

Die Funktion AssignPerson ($ movieID, 'camera'); in der movie.php ist in der classes-file classes_functions.php definiert. Hier sind die wesentlichen Schnipsel sind

function AssignPerson($objectID, $type = 'actor') { 

    $memoryString = '';   

    // THAT FOLLOWING LINE IS NOT WORKING :::  

    $persons = $connection2MySQL->query("SELECT * FROM actors2movies"); 

    if (mysqli_num_rows($persons)) { 
     while ($person = mysqli_fetch_assoc($persons)) { 

      $personID = $person['personeID']; 

      $memoryString .= $person['personName'];  
     } 
    }  

    return $memoryString; 

}

Die Fehlermeldung, die im Browser kommt wie folgt aussieht:

Fatal error: Uncaught Error: Call to a member function query() on null in /var/www/web26777278/html/filmstadt-quedlinburg/scripts/classes_functions.php:173 Stack trace: #0 /var/www/web26777278/html/filmstadt-quedlinburg/movie.php(354): AssignPerson('800', 'director') #1 {main} thrown in /var/www/web26777278/html/filmstadt-quedlinburg/scripts/classes_functions.php on line 173

Das Problem hier ist, dass, wenn lösche ich die Linien der Abfrage (und die folgenden), das Programm funktioniert. Der Fehler muss also in der oben angegebenen Zeile liegen. Auf der anderen Seite, wenn ich diese Zeile direkt in die Movie.php kopiere, funktioniert die Zeile! Also muss es etwas mit der Kapselung von PHP-Dateien in die anderen tun.

Ich habe überprüft, ob ich die include-Zeile der SQL-Verbindung in der classes.php wiederholen muss. Ich habe auch überprüft, ob es vergessene Klammern, Rechtschreibfehler in den Datenbanktabellen und dergleichen gibt. Kann mir nicht helfen.

Haben Sie eine Idee, wo ich nach dem Problem suchen könnte?

Grüße und danke Frank

+1

arbeiten Es sieht nicht wie '$ connection2MySQL' ist in ihrem Umfang in dieser Funktion. Sie müssen es als Parameter übergeben. – iainn

+0

Aus Sicherheitsgründen sollten Sie wahrscheinlich die Anmeldeinformationen für die Verbindung mit dieser Datenbank ändern. Angenommen, der Benutzer, der Benutzer und der Datenbankname in Ihrem obigen Code sind echt. –

+0

Nach Funktion AssignPerson ($ objectID, $ type = 'actor') {.... add .... global $ connection2MySQL; – halojoy

Antwort

0

$connection2MySQL außerhalb Funktion deklariert wird, so dass es innerhalb Funktion null ist.

Sie müssen Verbindungsobjekt übergeben ordnungsgemäß funktioniert

+0

Ja, danke! Arbeite es mit deiner Hilfe aus und lerne etwas Neues! Eigentlich habe ich mit dem falschen Fokus geschaut ... Und ja, es wurde schon vorher in dem Artikel beantwortet, auf den du dich bezogen hast! Danke nochmal, Frank –

Verwandte Themen