这些是的占位符%
标志。如果您发送%
在与你自己进行比较的价值中,你会注意到它的变化\'%test%\'
进入wp_posts.post_title LIKE \'{30d0e4b86a2a793010a75740f60810aff6b57f6d18edc10be7ca6dc158e40c06}\\{30d0e4b86a2a793010a75740f60810aff6b57f6d18edc10be7ca6dc158e40c06}11{30d0e4b86a2a793010a75740f60810aff6b57f6d18edc10be7ca6dc158e40c06}\\{30d0e4b86a2a793010a75740f60810aff6b57f6d18edc10be7ca6dc158e40c06}\'
当你看到$query->request
.
数据库端的查询将具有%
. 我还没有研究到底是什么原因,在哪里做的,但我最近注意到了这一点。我相信几个版本之前不是这样的,所以可能是最近的更新。
编辑:我已经做了更多的调查。它是在4.8.3中添加的,来自wpdb:
/**
* Adds a placeholder escape string, to escape anything that resembles a printf() placeholder.
*
* @since 4.8.3
*
* @param string $query The query to escape.
* @return string The query with the placeholder escape string inserted where necessary.
*/
public function add_placeholder_escape( $query ) {
/*
* To prevent returning anything that even vaguely resembles a placeholder,
* we clobber every % we can find.
*/
return str_replace( \'%\', $this->placeholder_escape(), $query );
}
/**
* Removes the placeholder escape strings from a query.
*
* @since 4.8.3
*
* @param string $query The query from which the placeholder will be removed.
* @return string The query with the placeholder removed.
*/
public function remove_placeholder_escape( $query ) {
return str_replace( $this->placeholder_escape(), \'%\', $query );
}
相关trac票证为
#41925, 它的引入是为了确保SQL中不包含任何可能被sprintf误解为占位符的内容,同时“返回”编号占位符(这些占位符从未得到官方支持,但有效。由于安全问题,它们已被删除)。