MySQL SQL Modus und CONTENIDO 4.10

Fragen zur Installation von CONTENIDO 4.10? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
xmurrix
Beiträge: 2976
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

MySQL SQL Modus und CONTENIDO 4.10

Beitrag von xmurrix » Sa 3. Okt 2020, 14:59

Hallo zusammen,

neuere Versionen von MySQL werden immer strikter, viele Hoster stellen auf neue Versionen von MySQL um, die Datenbanken laufen dann mit strikten Einstellungen.

Das CONTENIDO CMS ist in der aktuellen Version 4.10.1 noch nicht in der Lage, mit einer MySQL-Datenbank zu arbeiten, die manche strikte SQL-Modi hat. Dazu gehören, soweit bisher bekannt, folgende Modi:
  • ONLY_FULL_GROUP_BY
  • STRICT_TRANS_TABLES
  • STRICT_ALL_TABLES
  • NO_ZERO_IN_DATE
  • NO_ZERO_DATE
Seitens CONTENIDO gibt es einige Tickets, die dieses Thema behandeln. Da die Änderungen weitgreifend sind und auch die Zahl der aktiven Entwickler sehr gering ist, wird sich das noch etwas in die Länge ziehen.

Nun vermehren sich die Fälle, bei denen CONTENIDO Benutzer Probleme bei der Installation oder Aktualisierung der Webseiten bekommen.

Ich war der Überzeugung, dass das Anpassen des SQL-Modus in der Konfiguration, dazu gibt es mehrere Beiträge im Forum, das Problem lösen sollte. Leider lag ich mit der Annahme falsch, das Setup und der Systemtest übernehmen nicht eine vorhandene Datenbank-Konfiguration.

Es gibt nun ein Ticket, dass das Thema angehen wird:
https://github.com/CONTENIDO/CONTENIDO/issues/154


Für alle, die ganz dringend eine Lösung für das Problem benötigen und keine Zeit für die Abarbeitung des Tickets haben oder gar auf die neue CONTENIDO Version warten wollen, habe ich eine Anleitung zusammengefasst, mit der man das mit ein Paar Anpassungen lösen kann.

Änderungen vor dem Ausführen des Setups

1. Öffnet die Datei "setup/lib/startup.php" und ändert die Konfiguration der Datenbank in wie folgt:

Code: Alles auswählen

$cfg['db'] = array(
    'connection' => array(
        'host' => (isset($_SESSION['dbhost'])) ? $_SESSION['dbhost'] : '',
        'database' => (isset($_SESSION['dbname'])) ? $_SESSION['dbname'] : '',
        'user' => (isset($_SESSION['dbuser'])) ? $_SESSION['dbuser'] : '',
        'password' => (isset($_SESSION['dbpass'])) ? $_SESSION['dbpass'] : '',
        'charset' => (isset($_SESSION['dbcharset'])) ? $_SESSION['dbcharset'] : '',
        'options' => array(
            MYSQLI_INIT_COMMAND => "SET SESSION sql_mode='';",
        ),
    ),
    'haltBehavior' => 'report',
    'haltMsgPrefix' => (isset($_SERVER['REQUEST_URI'])) ? $_SERVER['REQUEST_URI'] . ' ' : '',
    'enableProfiling' => false,
);
2. Öffnet die Datei "contenido/classes/class.systemtest.php" und ändert die Funktion testMySQLModeStrict() in wie folgt:

Code: Alles auswählen

    public function testMySQLModeStrict($host, $username, $password) {
        // host, user and password
        $dbCfg = array(
            'connection' => array(
                'host' => $host,
                'user' => $username,
                'password' => $password,
                'options' => array(
                    MYSQLI_INIT_COMMAND => "SET SESSION sql_mode='';",
                ),
            ),
        );

        $db = new cDb($dbCfg);
        $db->query('SELECT LOWER(@@SESSION.sql_mode) AS sql_mode');
        if ($db->nextRecord()) {
            if (cString::findFirstPos($db->f('sql_mode'), 'strict_trans_tables') !== false || cString::findFirstPos($db->f('sql_mode'), 'strict_all_tables') !== false) {
                return false;
            }
        }
        return true;
    }
Danach wird das Setup und die Prüfung des SQL-Modus im Systemtest beim Erstellen der Datenbankverbindung den SQL Modus wie gewünscht setzen und die Prüfung des SQL-Modus im Systemtest wird grünes Licht dafür geben.

Änderungen nach dem Ausführen des Setups

1. Erstellt nach dem Setup, falls nicht vorhanden, eine Konfigurationsdatei "data/config/{ENVIRONMENT}/config.local.php" und schreibt folgendes rein:

Code: Alles auswählen

$cfg['db']['connection']['options'] = [
    MYSQLI_INIT_COMMAND => "SET SESSION sql_mode='';",
];
CONTENIDO wird wie gewünscht laufen, da die Einstellung in der config.local.php dafür sorgt, dass der SQL-Modus beim Erstellen der Datenbankverbindung gesetzt wird.

Gruß
xmurrix

P.S.: Sollten manche immer noch beim Setup Probleme mit der Datenbank haben, bitte ich um entsprechendes Feedback.
CONTENIDO downloads: CONTENIDO 4.10.1
CONTENIDO links: Documentation, API documentation
CONTENIDO @ Github: CONTENIDO 4.10

homtata
Beiträge: 1107
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: MySQL SQL Modus und CONTENIDO 4.10

Beitrag von homtata » Sa 3. Okt 2020, 17:54

Hallo Murat,
erstmal danke für die schnelle Reaktion und die Beschreibung - es scheinen aber noch zwei wesentliche Fehler drin zu sein:
- Die Position der "options" ist bei dir kein Unterpunkt von "connections", sondern von "db" (in beiden Skriptänderungen), was falsch zu sein scheint.
- in der Datei setup/lib/functions findet sich keine Funktion namens setupInitializeConfig() und in einer ähnlich klingenden Funktion dort wird keinerlei DB-Array gesetzt, das man überschreiben könnte. Es gibt etwas baugleiches lediglich in der setup/lib/startup.php. Dort habe ich es geändert, und dann ist das Setup durchgelaufen.

LG
Viktor

xmurrix
Beiträge: 2976
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: MySQL SQL Modus und CONTENIDO 4.10

Beitrag von xmurrix » Sa 3. Okt 2020, 18:15

Hallo Viktor,

du hast vollkommen Recht, ich habe die beiden Fehler in der Beschreibung korrigiert.

Die 'options' ist natürlich ein Unterpunkt von 'connection' und die setup/lib/startup.php ist richtig, die Funktion setupInitializeConfig() gibt es in CONTENIDO 4.10.1 noch nicht.

Ich danke dir für das Feedback.

VG
Murat
CONTENIDO downloads: CONTENIDO 4.10.1
CONTENIDO links: Documentation, API documentation
CONTENIDO @ Github: CONTENIDO 4.10

homtata
Beiträge: 1107
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: MySQL SQL Modus und CONTENIDO 4.10

Beitrag von homtata » Sa 3. Okt 2020, 18:45

Hallo Murat,

perfekt, du bist ein Schatz! Danke für alles!
LG
Viktor

McHubi
Beiträge: 1163
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: MySQL SQL Modus und CONTENIDO 4.10

Beitrag von McHubi » Mi 21. Okt 2020, 11:44

Danke für alles!
Dem schließe ich mich an!
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

McHubi
Beiträge: 1163
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: MySQL SQL Modus und CONTENIDO 4.10

Beitrag von McHubi » Di 29. Dez 2020, 13:56

Hallo Murat,

da fehlt noch ein Komma... :wink:
missing-comma.JPG
(35.12 KiB) Noch nie heruntergeladen
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

xmurrix
Beiträge: 2976
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: MySQL SQL Modus und CONTENIDO 4.10

Beitrag von xmurrix » Di 29. Dez 2020, 14:06

Hallo Markus,
...da fehlt noch ein Komma...
danke für den Hinweis, ich habe es korrigiert.

Gruß
Murat
CONTENIDO downloads: CONTENIDO 4.10.1
CONTENIDO links: Documentation, API documentation
CONTENIDO @ Github: CONTENIDO 4.10

motion pixels
Beiträge: 19
Registriert: Di 11. Dez 2007, 11:40
Wohnort: Dinklage
Kontaktdaten:

Re: MySQL SQL Modus und CONTENIDO 4.10

Beitrag von motion pixels » Mi 31. Mär 2021, 15:44

Funktioniert wunderbar!
Sehr cool!
Danke!

ionos - 'strict' Modus

Antworten