跳到正文
原文
Make WordPress Core(核心开发)· Marin Atanasov·· 19 天前精选编辑评分68

WordPress 7.2 默认关闭数据库连接的 NO_BACKSLASH_ESCAPES SQL 模式

NO_BACKSLASH_ESCAPES SQL mode is now turned off by default in WordPress 7.2

编辑导读

WordPress 7.2 默认在数据库连接会话中关闭 NO_BACKSLASH_ESCAPES,避免反斜杠转义查询失败或返回错误数据。该调整仅影响 WordPress 数据库连接,不修改服务器的全局设置。站点若必须启用此模式,可通过 db.php drop-in 使用 `incompatible_sql_modes` 过滤器保留,但 WordPress Core 可能无法正常工作。

推荐理由

WordPress 7.2 的数据库连接策略可避免部分服务器启用 NO_BACKSLASH_ESCAPES 后引发难以定位的查询与数据问题。

WordPress 7.2 将 NO_BACKSLASH_ESCAPES 添加到 WordPress 不支持的 SQL 模式列表中。WordPress 在连接数据库时已经会关闭某些模式,例如 STRICT_ALL_TABLES、TRADITIONAL 和 ANSI。现在该模式也被加入了这个列表。

为什么进行此更改?

WordPress 使用反斜杠字符(\)来转义 SQL 查询中的特殊字符。当 NO_BACKSLASH_ESCAPES 开启时,MySQL 会将反斜杠视为普通字符,而不是转义字符。这样,包含转义值的查询可能会失败或返回错误的数据。

某些主机或服务器配置可能会启用此模式。在此次更改之前,部署在这些服务器上的网站可能会出现难以排查的数据库问题。

有关更多详细信息,请参阅 Ticket #66185。

有哪些更改?

当 WordPress 连接到数据库时,wpdb::set_sql_mode() 现在会从会话的 SQL 模式中移除 NO_BACKSLASH_ESCAPES。这只影响 WordPress 数据库连接,不会更改服务器的全局设置。

大多数网站不会注意到任何差异。

如果我需要此模式怎么办?

如果你的网站确实需要 NO_BACKSLASH_ESCAPES,可以使用现有的 incompatible_sql_modes 过滤器来保留它:

add_filter( 'incompatible_sql_modes', function ( $modes ) {
	return array_diff( $modes, array( 'NO_BACKSLASH_ESCAPES' ) );
} );

WordPress 在插件加载之前就会连接数据库,因此请在一个 db.php drop-in 中添加此代码。普通插件或 must-use 插件中的代码运行得太晚了。

请注意,开启此模式后,WordPress Core 可能无法正常工作。

感谢 @mcsf 审阅本文。

#7-2、#dev-notes、#dev-notes-7-2、#database

来源:Make WordPress Core(核心开发) · https://make.wordpress.org/core/2026/10/09/no_backslash_escapes-sql-mode-is-now-turned-off-by-default-in-wordpress-7-2/

部分链接为推广/关联链接。