背景:Blog 系统的 PHP 沙盒在 PHP 程序初始化时就自动建立了数据库连接,而且为了数据库安全不允许自行创建数据库连接。为此,我们修改了 WordPress 源码(wp-includes/wp-db.php),去掉了 mysql_connect 调用和 mysql_query 等查询函数中的 dbh(db handle)。但一些插件希望绕过 WordPress 的数据库类,自行访问数据库,这就会出问题,也就是一年半以来,blog 系统一直与这些插件不兼容。

现在我们对 PHP 沙盒进行了改进:

  • mysql_connectmysql_pconnect 不论什么参数,都返回已经建立的数据库连接。
  • mysql_select_db, mysql_close, mysql_list_db, mysql_drop_db 等函数,不论什么参数,都不做任何事并返回 false。
  • mysql_query, mysql_result 等含有可选连接参数的函数,忽略连接参数,始终使用默认连接(就好像连接参数不存在一样)。
  • 原来不支持的函数被调用时,以及 mysql_query 等函数加上连接参数调用时,会输出 E_DEPRECATED 级别的警告信息。WordPress DEBUG 模式的警告输出修改为 E_ALL & ~E_DEPRECATED,以免调试时大量此类信息充满屏幕。
  • 关闭 mysqli 支持。

如果您的插件需要访问数据库,主机名要使用 127.0.0.1(localhost);用户名、密码、数据库名任意,不管怎么填,连上的都是 PHP 沙盒自动连接的数据库。如果您发现数据库无法连接,或者某个 mysql 库函数无法使用,请联系我们:support AT blog.ustc.edu.cn