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