mysqli object is not fully initialized

  • Joomla Version
    5.0.1
    PHP Version
    PHP 8.1.x
    Hoster
    Lokal

    Hallo zusammen.
    Ich bin gerade dabei eine Seite von joomla 3 auf Joomla 4 auf Joomla 5 zu migrieren und bekomme, wenn ich eine gewisse View aufrufe folgenden Fehler (inkl. CallStack):



    Bei Problemen ist der Administrator dieser Website zuständig.

    Zitat
    0 mysqli object is not fully initialized

    Call Stack

    #FunctionLocation
    1()JROOT/libraries/vendor/joomla/database/src/Mysqli/MysqliStatement.php:138
    2mysqli->prepare()JROOT/libraries/vendor/joomla/database/src/Mysqli/MysqliStatement.php:138
    3Joomla\Database\Mysqli\MysqliStatement->__construct()JROOT/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:1020
    4Joomla\Database\Mysqli\MysqliDriver->prepareStatement()JROOT/libraries/vendor/joomla/database/src/DatabaseDriver.php:1785
    5Joomla\Database\DatabaseDriver->setQuery()JROOT/components/com_powerdog/helpers/powerdog.php:607
    6PowerdogHelpersPowerdog::getDayYearProduction()JROOT/components/com_powerdog/models/powerdogsummary.php:229
    7PowerdogModelPowerdogsummary->getDayYearProduction()JROOT/components/com_powerdog/views/powerdogsummary/view.html.php:216
    8PowerdogViewPowerdogsummary->_powerdogTasks()JROOT/components/com_powerdog/views/powerdogsummary/view.html.php:64
    9PowerdogViewPowerdogsummary->display()JROOT/libraries/src/MVC/Controller/BaseController.php:697
    10Joomla\CMS\MVC\Controller\BaseController->display()JROOT/components/com_powerdog/controller.php:38
    11PowerdogController->display()JROOT/libraries/src/MVC/Controller/BaseController.php:730
    12Joomla\CMS\MVC\Controller\BaseController->execute()JROOT/components/com_powerdog/powerdog.php:21
    13require_once()JROOT/libraries/src/Dispatcher/LegacyComponentDispatcher.php:71
    14Joomla\CMS\Dispatcher\LegacyComponentDispatcher::Joomla\CMS\Dispatcher\{closure}()JROOT/libraries/src/Dispatcher/LegacyComponentDispatcher.php:73
    15Joomla\CMS\Dispatcher\LegacyComponentDispatcher->dispatch()JROOT/libraries/src/Component/ComponentHelper.php:361
    16Joomla\CMS\Component\ComponentHelper::renderComponent()JROOT/libraries/src/Application/SiteApplication.php:218
    17Joomla\CMS\Application\SiteApplication->dispatch()JROOT/libraries/src/Application/SiteApplication.php:261
    18Joomla\CMS\Application\SiteApplication->doExecute()JROOT/libraries/src/Application/CMSApplication.php:306
    19Joomla\CMS\Application\CMSApplication->execute()JROOT/includes/app.php:58
    20require_once()JROOT/index.php:32


    wenn ich also nun in powerdog.php nachschaue (Zeile 606) sehe ich, dass $dbData->setQuery($query); aufgerufen wird. dbData ist vom Typ $dbData = JDatabaseDriver::getInstance($db_option);

    Wenn ich mir dbData dumpen lasse, so bekomme ich folgendes Ergebnis:

    object(Joomla\Database\Mysqli\MysqliDriver)#812 (24) { ["database":"Joomla\Database\DatabaseDriver":private]=> string(5) "data3" ["name"]=> string(6) "mysqli" ["serverType"]=> NULL ["connection":protected]=> object(mysqli)#811 (6) { ["client_info"]=> string(14) "mysqlnd 8.2.16" ["client_version"]=> int(80216) ["connect_errno"]=> int(1130) ["connect_error"]=> string(64) "Host '10.0.0.106' is not allowed to connect to this MySQL server" ["errno"]=> int(1130) ["error"]=> string(64) "Host '10.0.0.106' is not allowed to connect to this MySQL server" } ["count":protected]=> int(0) ["cursor":protected]=> NULL ["executed":protected]=> bool(false) ["limit":protected]=> int(0) ["nameQuote":protected]=> string(1) "`" ["nullDate":protected]=> string(19) "0000-00-00 00:00:00" ["offset":protected]=> int(0) ["options":protected]=> array(14) { ["host"]=> string(10) "10.0.0.103" ["database"]=> string(5) "data3" ["user"]=> string(8) "ABCDE" ["password"]=> string(14) "ABCDE" ["prefix"]=> string(0) "" ["driver"]=> string(6) "mysqli" ["select"]=> bool(true) ["factory"]=> object(Joomla\Database\DatabaseFactory)#813 (0) { } ["monitor"]=> NULL ["port"]=> int(3306) ["socket"]=> NULL ["utf8mb4"]=> bool(false) ["sqlModes"]=> array(3) { [0]=> string(19) "STRICT_TRANS_TABLES" [1]=> string(26) "ERROR_FOR_DIVISION_BY_ZERO" [2]=> string(22) "NO_ENGINE_SUBSTITUTION" } ["ssl"]=> array(0) { } } ["sql":protected]=> NULL ["statement":protected]=> NULL ["tablePrefix":protected]=> string(0) "" ["utf":protected]=> bool(true) ["errorNum":protected]=> int(0) ["errorMsg":protected]=> NULL ["transactionDepth":protected]=> int(0) ["factory":protected]=> object(Joomla\Database\DatabaseFactory)#813 (0) { } ["monitor":protected]=> NULL ["dispatcher":"Joomla\Database\DatabaseDriver":private]=> NULL ["utf8mb4":protected]=> bool(false) ["mariadb":protected]=> bool(false) }

    Vor allem "Host 10.0.0.106" finde ich relevant. Password und User habe ich übrigens aus Sicherheitsgründen auf ABCDE geändert.


    woran kann das liegen? Datenbankaufrufe funktionieren grundsätzlich auf der Seite bereits.
    Es ist außerdem so, dass ich von der eigentlichen Seite vom Produktivsystem eine Kopie erstellt habe und derzeit auf einem Testserver entwickle. Kann es sein, dass ich nun irgendwelche Konfigurationen ändern muss?

    dtype host und user von der configuration.php sehen so aus:


    public $dbtype = 'mysql';

    public $host = 'localhost';

    public $user = 'joomla';

  • Der Call-Stack ist ja eindeutig:


    Die Komponente com_powerdog bringt hier eine Fehlermeldung.


    Ist diese Komponente aktuell und Joomla5-tauglich?


    Ich kenne diese Komponente nicht.


    Vielleicht vor der Migration mal deinstallieren.


    Müsste aber auch schon bei der Migrationsprüfung angezeigt worden sein!

  • com_powerdog ist eine eigens programmierte Komponente, die als Helferklasse dient
    die kann leider nicht einfach deaktiviert werden, da über sie wichtige Prozesse, wie die Datenbankverbindung laufen

  • Grundlegend funktionieren beide Varianten unter Joomla 5 noch.

    Zitat


    "Host '10.0.0.106' is not allowed to connect to this MySQL server"

    Das ist dann eher ein Problem in der Datenbankfreigabe, also auf dem Datenbankserver. ALso der Server unter "10.0.0.103" muss für diese Datenbank so konfiguriert sein, dass auch ein Zugriff von abweichender IP "10.0.0.106" erlaubt ist.


    Zumindest verstehe ich dich so, dass es um 2 verschiedene Datenbanken geht, weil, wenn du auf die Joomla-Datenbank zugreifen willst, ist ja eigentlich das getInstance bzw. Pendant gar nicht nötig. Sondern old-fashioned $db = JFactory::getDbo() ausreichend. Das ist dann die mit den Options aus der configuration.php. Für die andere müssen die options (das Array) ja extra definiert werden.