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/
部分链接为推广/关联链接。