Fehlerbehebung

PrestaShop: „An exception occurred while establishing a connection to figure out your platform version“

Geprüft am 4 Min. Lesezeit MySQL Kompatibilität PrestaShop

Wenn beim Installieren oder Aktualisieren von PrestaShop im Schritt, der mit der Datenbank arbeitet, ein Fehler wie dieser erscheint:

[WARNING] Some commands could not be registered. An exception occurred in ConnectionFactory.php
while establishing a connection to figure out your platform version.
You can circumvent this by setting a 'server_version' configuration value.
For further information, visit: https://github.com/doctrine/DoctrineBundle/issues/673.
In AbstractMySQLDriver.php, an exception occurred in driver:
SQLSTATE[HY000] [2026] SSL connection error: SSL_CTX_set_default_verify_paths failed.
The same error is repeated in Exception.php and PDOConnection.php:
SQLSTATE[HY000] [2026] SSL connection error: SSL_CTX_set_default_verify_paths failed.

liegt das Problem weder bei MySQL noch bei den Zertifikaten des Servers: Es ist eine falsch interpretierte Zahl in der Konfiguration von PrestaShop. Wenn Sie mit dem Anwendungsinstallationsprogramm von cPanel installieren, passiert Ihnen das nicht; wenn der Fehler trotzdem auftritt, gibt es zwei Lösungen.

Warum es passiert

PrestaShop 1.7 und die Versionen 8.0 und 8.1 aktivieren die MySQL-Option MULTI_STATEMENTS, indem sie ihre Nummer, 1013, in app/config/doctrine.yml schreiben. Diese Nummer ist mit der auf mysqlnd basierenden PHP-Erweiterung korrekt, aber die klassische Erweiterung pdo_mysql nummeriert ihre Optionen anders: Für sie ist MULTI_STATEMENTS die 1016, und 1013 ist der Pfad zu den SSL-Zertifikaten (SSL_CAPATH).

So übergibt PrestaShop der Verbindung am Ende einen ungültigen Zertifikatspfad, die SSL-Verbindung schlägt fehl und Doctrine kann die MySQL-Version nicht ermitteln. Daher das SSL_CTX_set_default_verify_paths failed.

PrestaShop hat das in 8.2 behoben, das den Namen der Konstante statt der Nummer verwendet. Wenn Sie von einer älteren Version aktualisieren, kann der Fehler während des Updates auftreten.

Lösung 1: die Erweiterung nd_pdo_mysql aktivieren (empfohlen)

Ersetzen Sie die Erweiterung pdo_mysql durch nd_pdo_mysql unter cPanel > PHP-Version auswählen in der Registerkarte der Erweiterungen:

  1. Deaktivieren Sie pdo_mysql.
  2. Aktivieren Sie nd_pdo_mysql.

Aktivierte Erweiterung nd_pdo_mysql unter PHP-Version auswählen in cPanel

Die Änderungen werden automatisch gespeichert. nd_pdo_mysql tut dasselbe wie pdo_mysql, verwendet aber die Nummerierung, die PrestaShop erwartet (1013), sodass Sie keine Datei anfassen müssen.

Wenn Ihre Domain eine andere PHP-Version als die allgemeine des Kontos verwendet, nehmen Sie die Änderung in dieser Version vor. Das erklären wir in Mehrere PHP-Versionen pro Verzeichnis oder Domain.

Lösung 2: app/config/doctrine.yml bearbeiten

Verwenden Sie sie nur, wenn Sie die Erweiterung nicht wechseln können. Öffnen Sie app/config/doctrine.yml im Dateimanager von cPanel und suchen Sie den Abschnitt options:

options:
  # PDO::MYSQL_ATTR_INIT_COMMAND
  1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"
  # PDO::MYSQL_ATTR_MULTI_STATEMENTS
  1013: '%env(const:runtime:_PS_ALLOW_MULTI_STATEMENTS_QUERIES_)%'

Ändern Sie 1013 in 1016:

options:
  # PDO::MYSQL_ATTR_INIT_COMMAND
  1002: "SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''))"
  # PDO::MYSQL_ATTR_MULTI_STATEMENTS
  1016: '%env(const:runtime:_PS_ALLOW_MULTI_STATEMENTS_QUERIES_)%'

Behalten Sie die Einrückung mit Leerzeichen bei: YAML erlaubt keine Tabulatoren. Leeren Sie danach den Cache, indem Sie den Inhalt von var/cache/ löschen, und wiederholen Sie die Installation oder das Update.

1016 ist nur mit pdo_mysql korrekt. Wenn Sie später nd_pdo_mysql aktivieren, setzen Sie wieder 1013 ein.

Prüfen, ob es funktioniert

Wiederholen Sie die Installation oder das Update: Der Datenbankschritt muss ohne den Hinweis zu platform version abgeschlossen werden. Wenn das Update auf halbem Weg stehen geblieben war, prüfen Sie vorher sein Protokoll und stellen Sie, falls nötig, das Backup wieder her, das Sie vor dem Start erstellt haben.

Das könnte Ihnen auch helfen

Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.