TimothyQiu's Blog

keep it simple stupid

PDO (SQLite) For WordPress 插件的 Bug 们

分类:技术

注意:根据官网介绍,该插件无法在 WordPress 升级后无法自动更新数据库结构。所以如果使用该插件时升级了 WordPress 并且升级需要修改数据库,那么,虽然博客依旧能够继续显示,但是你会被锁在控制面板外,无法登录。使用该插件期间如果需要升级,请参见 http://smilett.com/?p=588

因为 VPS 内存有限,MySQL 对于我这种懒人来说优化起来又真的是很麻烦,于是在架 WordPress 的时候就用了 SQLite 数据库。于是 PDO (SQLite) For WordPress 插件就成了必需品。

但悲剧的是,这个插件本身是有不少 Bug 的,而这插件也竟然有一年没更新了 ╮(╯▽╰)╭

preg_last_error() 问题

PHP 版本小于 5.2.0 时会出现找不到 preg_last_error 函数的问题。但事实上这个函数本身只是作者用作调试用的,所以可以直接到 wp-content\pdo\driver_sqlite\pdo_sqlite_driver_create.php 把含有 preg_last_error 函数调用的那一行注释掉,问题就解决了。

安装成功后无法登录问题

悲催的我一开始被这个问题困扰了很久 =。= 原因是插件执行安装时既没有获取用户在安装页面输入的密码(这种情况下认为用户没有输入密码,系统自动生成随机密码),也没有把自动生成的随机密码输出。

解决方法是编辑 wp-content\pdo\wp_install.php 文件,把

$message = __('<strong><em>Note that password</em></strong> carefully! It is a <em>random</em> password that was generated just for you.');

替换为

$message = __($random_password . '<strong><em>Note that password</em></strong> carefully! It is a <em>random</em> password that was generated just for you.');

分类和标签消失问题

表现为分类和标签均显示为空(其实也有各种 Quick Edit 出现 PHP 错误的现象)。原因是插件的 escape 方法有问题,如 PHP 错误所说,escape 方法应该在输入为数组时返回一个数组,插件却直接:

function escape($string) {
    return addslashes($string);
}

于是,解决方法是编辑 wp-content\pdo\db.php 文件,将其替换为:

function escape( $data ) {
    if ( is_array( $data ) ) {
        foreach ( (array) $data as $k => $v ) {
            if ( is_array( $v ) )
                $data[$k] = $this->escape( $v );
            else
                $data[$k] = $this->_weak_escape( $v );
        }
    } else {
        $data = $this->_weak_escape( $data );
    }
    return $data;
}

WordPress

已有 2 条评论 »

  1. 有个问题想请教~:PDO For Wordpress,这个插件无法启用~【无法启用插件,因为它引起了一个致命错误(fatal error)。Your PHP installation appears not to have the right PDO drivers loaded. These are required for this version of Wordpress and the type of databa<x>se you have specified.】
    怎么解决?大哥!

    1. 首先确定你的 php 支持 pdo_sqlite 模块;然后,在 wp-config.php 里 define('DB_TYPE', 'sqlite') 的地方是大小写敏感的,确保 sqlite 是小写的。

添加新评论 »