Ergebnis 1 bis 3 von 3

Thema: Contao\BackendUser->__destruct() wirft Datenbank-Fehler nach \Database::getInstance()

  1. #1
    Contao-Nutzer
    Registriert seit
    27.08.2013.
    Beiträge
    38

    Standard Contao\BackendUser->__destruct() wirft Datenbank-Fehler nach \Database::getInstance()

    Hallo alle zusammen,

    Ich entwickle gerade ein Contao-Modul unter Contao 3.3.5 das im $GLOBALS['TL_HOOKS']['initializeSystem'] Hook auf die Datenbank zugreifen soll.
    Leider wirft die Methode Contao\BackendUser->__destruct() einen Datenbank-Fehler sobald ich im Modul \Database::getInstance() aufrufe.

    Folgender Fehler tritt auf:
    Code:
    Warning: mysqli::real_escape_string() [mysqli.real-escape-string]: Couldn't fetch mysqli in system/modules/core/library/Contao/Database/Mysqli/Statement.php on line 48
    
    #0 [internal function]: __error(2, 'mysqli::real_es...', '/usr/www/users/...', 48, Array)
    #1 system/modules/core/library/Contao/Database/Mysqli/Statement.php(48): mysqli->real_escape_string('a:19:{s:7:"refe...')
    #2 system/modules/core/library/Contao/Database/Statement.php(335): Contao\Database\Mysqli\Statement->string_escape('a:19:{s:7:"refe...')
    #3 system/modules/core/library/Contao/Database/Statement.php(310): Contao\Database\Statement->escapeParams(Array)
    #4 system/modules/core/library/Contao/Database/Statement.php(253): Contao\Database\Statement->replaceWildcards(Array)
    #5 system/modules/core/classes/BackendUser.php(163): Contao\Database\Statement->execute('a:19:{s:7:"refe...', '2')
    #6 [internal function]: Contao\BackendUser->__destruct()
    #7 {main}
    
    
    Warning: mysqli::real_escape_string() [mysqli.real-escape-string]: Couldn't fetch mysqli in system/modules/core/library/Contao/Database/Mysqli/Statement.php on line 48
    
    #0 [internal function]: __error(2, 'mysqli::real_es...', '/usr/www/users/...', 48, Array)
    #1 system/modules/core/library/Contao/Database/Mysqli/Statement.php(48): mysqli->real_escape_string('2')
    #2 system/modules/core/library/Contao/Database/Statement.php(335): Contao\Database\Mysqli\Statement->string_escape('2')
    #3 system/modules/core/library/Contao/Database/Statement.php(310): Contao\Database\Statement->escapeParams(Array)
    #4 system/modules/core/library/Contao/Database/Statement.php(253): Contao\Database\Statement->replaceWildcards(Array)
    #5 system/modules/core/classes/BackendUser.php(163): Contao\Database\Statement->execute('a:19:{s:7:"refe...', '2')
    #6 [internal function]: Contao\BackendUser->__destruct()
    #7 {main}
    
    
    Warning: mysqli::query() [mysqli.query]: Couldn't fetch mysqli in system/modules/core/library/Contao/Database/Mysqli/Statement.php on line 78
    
    #0 [internal function]: __error(2, 'mysqli::query()...', '/usr/www/users/...', 78, Array)
    #1 system/modules/core/library/Contao/Database/Mysqli/Statement.php(78): mysqli->query('UPDATE tl_user ...')
    #2 system/modules/core/library/Contao/Database/Statement.php(281): Contao\Database\Mysqli\Statement->execute_query()
    #3 system/modules/core/library/Contao/Database/Statement.php(254): Contao\Database\Statement->query()
    #4 system/modules/core/classes/BackendUser.php(163): Contao\Database\Statement->execute('a:19:{s:7:"refe...', '2')
    #5 [internal function]: Contao\BackendUser->__destruct()
    #6 {main}
    
    
    Warning: Contao\Database\Mysqli\Statement::get_error() [contao\database\mysqli\statement.get-error]: Couldn't fetch mysqli in system/modules/core/library/Contao/Database/Mysqli/Statement.php on line 89
    
    #0 system/modules/core/library/Contao/Database/Mysqli/Statement.php(89): __error(2, 'Contao\Database...', '/usr/www/users/...', 89, Array)
    #1 system/modules/core/library/Contao/Database/Statement.php(110): Contao\Database\Mysqli\Statement->get_error()
    #2 system/modules/core/library/Contao/Database/Statement.php(283): Contao\Database\Statement->__get('error')
    #3 system/modules/core/library/Contao/Database/Statement.php(254): Contao\Database\Statement->query()
    #4 system/modules/core/classes/BackendUser.php(163): Contao\Database\Statement->execute('a:19:{s:7:"refe...', '2')
    #5 [internal function]: Contao\BackendUser->__destruct()
    #6 {main}
    
    Fatal error:  Uncaught exception 'Exception' with message 'Query error:  (UPDATE tl_user SET session='' WHERE id='')' in system/modules/core/library/Contao/Database/Statement.php:283
    Stack trace:
    #0 /usr/www/users/mhneu/system/modules/core/library/Contao/Database/Statement.php(254): Contao\Database\Statement->query()
    #1 /usr/www/users/mhneu/system/modules/core/classes/BackendUser.php(164): Contao\Database\Statement->execute('a:19:{s:7:"refe...', '2')
    #2 [internal function]: Contao\BackendUser->__destruct()
    #3 {main}
      thrown in <b>system/modules/core/library/Contao/Database/Statement.php</b> on line <b>283</b><br />
    Das Modul ist folgendermaßen aufgebaut:

    config.php:

    Code:
    <?php
    $GLOBALS['TL_HOOKS']['initializeSystem'][] = array('SE_IS24_Connector\Test', 'test');

    Test.php:
    Code:
    <?php
    namespace SE_IS24_Connector;
    
    class Test {
        public function test(){
            $database=\Database::getInstance();
        }
    
    }
    Wenn ich in dieser Function keine Datenbank hole, tritt der Fehler nicht mehr auf.
    Sobald ich aber in irgendeiner Form auf die Datenbank zugreife oder Sie importiere taucht der Fehler wieder auf.

    Habt Ihr eine Ahnung was ich da falsch mache ?
    Geändert von barteljan (03.11.2014 um 11:32 Uhr)

  2. #2
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Die Reihenfolge der Erst-Instanziierung von User und Datenbank ist entscheidend. Wird der User erst nach der DB erstellt, so ist die Datenbank nicht mehr verfügbar, wenn __destruct ausgeführt wird. Daher, wenn man sich in so einem frühen Stadium wie der initializeHook ins System einklinkt, muss man sichergehen dass die Reihenfolge stimmt:

    PHP-Code:
    \BackendUser::getInstance();
    \
    Database::getInstance(); 
    Das Problem hat schon manchen ein paar Nerven gekostet.
    Geändert von webstar (03.11.2014 um 13:49 Uhr) Grund: Grammatik verbessert. :)

  3. #3
    Contao-Nutzer
    Registriert seit
    27.08.2013.
    Beiträge
    38

    Standard

    Du bist mein perönlicher Held

    Problem gelöst, ein paar graue Haare mehr und vielen Dank .

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •