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
arbeiten Es sieht nicht wie '$ connection2MySQL' ist in ihrem Umfang in dieser Funktion. Sie müssen es als Parameter übergeben. – iainn
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. –
Nach Funktion AssignPerson ($ objectID, $ type = 'actor') {.... add .... global $ connection2MySQL; – halojoy