php7.0下安装typecho1.0出现Database Server Error解决办法

昨天移动网站,在php7.0的情况下,安装完typecho1.0以后运行,发现`DatabaseServerError`的问题。通过本站关于db错误的排查文章《[安装typecho后出现数据库错误DatabaseQueryError的解决办法汇总][1]》,我们在根目录下的index.php加入一行调试代码: ``` #file:index.php define('__TYPECHO_DEBUG_...

昨天移动网站,在php 7.0的情况下,安装完typecho1.0以后运行,发现`Database Server Error`的问题。通过本站关于db错误的排查文章《[安装typecho后出现数据库错误Database Query Error的解决办法汇总][1]》,我们在根目录下的index.php加入一行调试代码: ``` #file: index.php define('__TYPECHO_DEBUG__',true);//add by http://www.typechodev.com ``` 加入后再运行,会出现详细的bug 信息,其中最有效的一行bug信息是: ``` Adapter Typecho_Db_Adapter_Mysql is not available ``` Db的Adapter是连接数据库和驱动之间的适配器(即设计模式里面的适配器),这行提示的意思是:`当前Mysql适配器在该环境下已经不适用`。通过网友提示,在php 7.0环境下Mysql的链接函数已经被干掉,推荐使用mysqli 或者 pdo,我们打开typecho的源码发现,typecho1.0只有Mysql和Pdo两种适配器,如图: ![014BEBCA-B593-4503-8D8E-FE78CA007DEE.png][2] 既然Mysql已经废弃,那么只能选用Pdo了。在根目录下找到config.inc.php找到: ``` $db = new Typecho_db("Mysql","typecho_"); //其中Mysql为默认的适配器,typecho_为表前缀 ``` 修改为: ``` $db = new Typecho_db("Pdo_Mysql","typecho_"); ``` 修改保存后运行,发现成功连接数据库。 **注意:修改完毕后记得把index.php调回非debug模式,即`define('__TYPECHO_DEBUG__',false);` 或者直接删去改行代码。** ###后续 在源码中,我们看到Pdo的类,笔者刚开始直接填入Pdo这个值,但是会报错: ``` PHP message: PHP Fatal error: Uncaught TypeError: Argument 1 passed to Typecho_Common::exceptionHandle() must be an instance of Exception ``` 所以在适配器的命名上,请填入`Pdo_Mysql`的值。 [1]: https://www.typechodev.com/case/Typecho%E6%95%B0%E6%8D%AE%E5%BA%93%E9%94%99%E8%AF%AFDatabase-Query-Error%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95.html [2]: https://www.typechodev.com/usr/uploads/2017/12/3239252626.png