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
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,
);
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;
}
Ä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='';",
];
Gruß
xmurrix
P.S.: Sollten manche immer noch beim Setup Probleme mit der Datenbank haben, bitte ich um entsprechendes Feedback.