Solucionar problemas

PrestaShop: «An exception occurred while establishing a connection to figure out your platform version»

Revisado el 5 min de lectura MySQL compatibilidad PrestaShop

Si al instalar o actualizar PrestaShop, en el paso que trabaja con la base de datos, aparece un error como este:

[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.

el problema no es MySQL ni los certificados del servidor: es un número mal interpretado en la configuración de PrestaShop. No te pasará si instalas con el autoinstalador de aplicaciones de cPanel, pero si te aparece tiene dos soluciones.

Por qué ocurre

PrestaShop 1.7 y las versiones 8.0 y 8.1 activan la opción de MySQL MULTI_STATEMENTS escribiendo su número, 1013, en app/config/doctrine.yml. Ese número es correcto con la extensión de PHP basada en mysqlnd, pero la extensión pdo_mysql clásica numera sus opciones de otra forma: para ella MULTI_STATEMENTS es la 1016 y la 1013 es la ruta de certificados SSL (SSL_CAPATH).

Así, PrestaShop acaba pasando una ruta de certificados inválida a la conexión, la conexión SSL falla y Doctrine no puede averiguar la versión de MySQL. De ahí el SSL_CTX_set_default_verify_paths failed.

PrestaShop lo corrigió en la 8.2, que usa el nombre de la constante en vez del número. Si actualizas desde una versión anterior, el error puede aparecer durante la actualización.

Solución 1: activar la extensión nd_pdo_mysql (recomendada)

Cambia la extensión pdo_mysql por nd_pdo_mysql desde cPanel > Seleccionar versión de PHP, en la pestaña de extensiones:

  1. Desmarca pdo_mysql.
  2. Marca nd_pdo_mysql.

Extensión nd_pdo_mysql marcada en Seleccionar versión de PHP de cPanel

Los cambios se guardan solos. nd_pdo_mysql hace lo mismo que pdo_mysql, pero usa la numeración que espera PrestaShop (1013), así que no tienes que tocar ningún fichero.

Si tu dominio usa una versión de PHP distinta a la general de la cuenta, haz el cambio en esa versión. Lo tienes explicado en múltiples versiones de PHP por directorio o dominio.

Solución 2: editar app/config/doctrine.yml

Úsala solo si no puedes cambiar la extensión. Abre app/config/doctrine.yml con el administrador de archivos de cPanel y busca el apartado 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_)%'

Cambia el 1013 por 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_)%'

Respeta la sangría con espacios: YAML no admite tabuladores. Después vacía la caché borrando el contenido de var/cache/ y repite la instalación o la actualización.

El 1016 solo es correcto con pdo_mysql. Si más adelante activas nd_pdo_mysql, vuelve a poner el 1013.

Comprobar que funciona

Repite la instalación o la actualización: el paso de base de datos debe completarse sin el aviso de platform version. Si la actualización se había quedado a medias, revisa antes su registro y, si hace falta, restaura la copia que hiciste antes de empezar.

También te puede ayudar

¿Algo no cuadra o ha cambiado? Cuéntanoslo y lo revisamos.