You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PrestaShop 1.7.8.8升级至8.1.7:upgradeDB步骤报错如何解决?

PrestaShop 1.7.8.8 升级到8.1.7 CLI升级DB时SQL引擎选择失败

问题现象

通过CLI执行PrestaShop自动升级,文件升级完成后执行upgradeDb步骤时抛出Cannot select any valid SQL engine异常,尽管已确认PHP7.4环境中pdo_mysql和mysqli扩展均已安装。

升级报错日志

INFO - 506 files left to upgrade.
INFO - === Step upgradeFiles
INFO - 106 files left to upgrade.
INFO - === Step upgradeFiles
INFO - All files upgraded. Now upgrading database...
INFO - Restart requested. Please run the following command to continue your upgrade:
INFO - $ modules/autoupgrade/cli-upgrade.php --dir=admin9254z9q7u --action=upgradeDb --data=eyJlcnJvciI6bnVsbCwic3RlcERvbmUiOmZhbHNlLCJuZXh0IjoidXBncmFkZUZpbGVzIiwic3RhdHVzIjoib2siLCJuZXh0X2Rlc2MiOiJJTkZPIC0gUmVzdGFydCByZXF1ZXN0ZWQuIFBsZWFzZSBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIGNvbnRpbnVlIHlvdXIgdXBncmFkZTpcbiIsIm5leHRRdWlja0luZm8iOltdLCJuZXh0RXJyb3JzIjpbXSwibmV4dFBhcmFtcyI6eyJvcmlnaW5WZXJzaW9uIjoiMS43LjguOCIsIml [..]
INFO - === Step upgradeDb
INFO - Cleaning file cache
INFO - Running opcache_reset
PrestaShopException in /var/www/presta_us_klon/classes/db/Db.php line 303
#0 /var/www/presta_us_klon/classes/db/Db.php(236): DbCore::getClass()
#1 /var/www/presta_us_klon/config/alias.php(47): DbCore::getInstance()
#2 /var/www/presta_us_klon/classes/shop/Shop.php(1351): pSQL()
#3 /var/www/presta_us_klon/classes/shop/Shop.php(351): ShopCore::findShopByHost()
#4 /var/www/presta_us_klon/config/config.inc.php(117): ShopCore::initialize()
#5 /var/www/presta_us_klon/modules/autoupgrade/classes/UpgradeContainer.php(665): require_once('...')
#6 /var/www/presta_us_klon/modules/autoupgrade/classes/Task/AbstractTask.php(165): PrestaShop\Module\AutoUpgrade\UpgradeContainer->initPrestaShopCore()
#7 /var/www/presta_us_klon/modules/autoupgrade/classes/Task/Upgrade/UpgradeDb.php(90): PrestaShop\Module\AutoUpgrade\Task\AbstractTask->init()
#8 /var/www/presta_us_klon/modules/autoupgrade/classes/Task/Runner/ChainedTasks.php(59): PrestaShop\Module\AutoUpgrade\Task\Upgrade\UpgradeDb->init()
#9 /var/www/presta_us_klon/modules/autoupgrade/cli-upgrade.php(50): PrestaShop\Module\AutoUpgrade\Task\Runner\ChainedTasks->run()
#10 {main}

异常触发代码

报错来自Db.php的getClass方法,当无法匹配到可用SQL引擎时抛出异常:

public static function getClass()
{
    $class = '';
    if (PHP_VERSION_ID >= 50200 && extension_loaded('pdo_mysql')) {
        $class = 'DbPDO';
    } elseif (extension_loaded('mysqli')) {
        $class = 'DbMySQLi';
    }

    if (empty($class)) {
        throw new PrestaShopException('Cannot select any valid SQL engine.');
    }

    return $class;
}

环境验证结果

已通过以下命令确认PHP7.4环境中pdo_mysql和mysqli扩展正常加载:

root@joffrey:/var/www# php7.4 -m | grep pdo_mysql
pdo_mysql
root@joffrey:/var/www# php7.4 -m | grep mysqli
mysqli
root@joffrey:/var/www/presta_us_klon# cat testy.php
<?php
print_r(get_loaded_extensions());
?>
root@joffrey:/var/www/presta_us_klon# php7.4 testy.php | grep -i 'mysqli\|pdo_mysql'
    [33] => mysqli
    [34] => pdo_mysql

解决方案

1. 检查CLI与Web环境的php.ini一致性

CLI和Web服务器可能使用不同的php.ini配置文件,即使CLI中扩展正常,升级脚本依赖的Web环境配置可能存在问题。执行以下命令确认配置路径:

# 查看CLI使用的php.ini路径
php7.4 --ini
# 查看Web环境的php.ini路径(以Nginx+FPM为例)
php7.4-fpm -i | grep "Loaded Configuration File"

若路径不同,确保Web环境的php.ini中启用了pdo_mysql和mysqli,且未被disable_functions禁用。

2. 手动指定数据库驱动

修改config/settings.inc.php文件,手动设置数据库驱动:
找到行:

define('_DB_CLASS_', '');

替换为:

// 优先使用PDO
define('_DB_CLASS_', 'DbPDO');
// 或使用mysqli
// define('_DB_CLASS_', 'DbMySQLi');

保存后重新执行upgradeDb命令。

3. 清除缓存并重启服务

升级过程中Opcache可能缓存旧类文件,导致扩展检测失效:

  • 重启PHP-FPM或Web服务器清除Opcache
  • 删除var/cache目录下的所有文件(保留.htaccess)
  • 重新执行升级命令

4. 以Web服务器用户身份执行升级

避免权限差异导致的问题,使用与Web服务器相同的用户(如www-data)执行升级命令:

sudo -u www-data php7.4 modules/autoupgrade/cli-upgrade.php --dir=admin9254z9q7u --action=upgradeDb --data=...

5. 验证数据库连接配置

确认config/settings.inc.php中的数据库主机、用户名、密码、库名配置正确,确保升级过程中未被篡改。


内容的提问来源于stack exchange,提问作者Polak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 19:17:03