您的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标记。