Typecho博客升级导致Database Server Error

1、问题描述

之前博客程序是放在阿里云虚拟主机上面,后来买了ESC,就自己搭建了环境使用的是PHP7.1.
但是在迁移之后,提示

Database Server Error

2、解决问题经过

查看源代码,在 /config.inc.php 实例化了Typecho_DB

/** 定义数据库参数 */
$db = new Typecho_Db('Mysql', 'typecho_');
$db->addServer(array (
  'host' => '127.0.0.1',
  'user' => 'user',
  'password' => 'password',
  'charset' => 'utf8',
  'port' => '3306',
  'database' => 'typecho',
), Typecho_Db::READ | Typecho_Db::WRITE);
Typecho_Db::set($db);

Typecho_DB类对应的文件为/var/Typecho/Db.php,

public function __construct($adapterName, $prefix = 'typecho_')
    {
        /** 获取适配器名称 */
        $this->_adapterName = $adapterName;

        /** 数据库适配器 */
        $adapterName = 'Typecho_Db_Adapter_' . $adapterName;

        if (!call_user_func(array($adapterName, 'isAvailable'))) {
            throw new Typecho_Db_Exception("Adapter {$adapterName} is not available");
        }

        $this->_prefix = $prefix;

        /** 初始化内部变量 */
        $this->_pool = array();
        $this->_connectedPool = array();
        $this->_config = array();

        //实例化适配器对象
        $this->_adapter = new $adapterName();
    }

可以看到,Typecho_DB类两个参数,第一个是适配器类名,第二个是数据库表前缀。
最后拼接生成的默认的适配器名称为 Typecho_DB_Adapter_Mysql,其对应的文件为/var/Typecho/Db/Adapter/Mysql.php。

3、原因

现在我们可以知道,Tyepcho使用的是Mysql扩展,但是在PHP7以后的版本,已经去除了Mysql扩展,因此我们可以选择使用PDO或者Mysqli.

4、解决办法

因此,我们只需要把 /config.inc.php里面,实例化Typecho_DB的第一个参数改为PDO_Mysql就可以了。

typecho

我来吐槽

*

*