您的SQL命令高度insecure 而且还存在SQL注入之类的安全问题,因此,即使这可能无法回答问题,我强烈建议您使用$wpdb->prepare()
和$wpdb->esc_like()
— 后者用于逃避%
SQL中的字符。
此外,您可以简单地使用$wpdb->posts
要输出WordPress帖子的表名,例如wp_posts
.
我注意到在SQL命令中:
表名不正确,因为FROM
和$wpdb->prefix
连接为一个单词,如FROMwp_posts
.
第二个后面有一个空格%
在LIKE
条款:%". $_POST[\'value\']. "% \'
— 所以可能不需要空白?或者这可能是查询没有返回任何结果的原因。
在var_dump()
实际上不包含重音-您使用definition
而不是définition
. 直接的也一样。
现在,您应该如何生成查询或SQL命令:
$value = $_POST[\'value\'] ?? \'\';
// wrapped for brevity
$sql = $wpdb->prepare( "
SELECT DISTINCT *
FROM {$wpdb->posts}
WHERE post_title LIKE %s
", \'%\' . $wpdb->esc_like( $value ) . \'%\' );
$res = $wpdb->get_results( $sql );
我用一篇文章测试了上面的代码,文章的标题包含了这个词
définition
, 查询返回一个结果(这是一个测试帖子)。
如果我的代码不适合你,你可以试试sanitize_text_field()
, 但除其他外,这将剥离HTML标记。