编辑:我找到了原因但不是解决方案。通过使用var_dump($ wpdb-> last_query),我发现它正在将&符号转义为R&D
,因此查询(正确)不再返回任何结果:
SELECT `user_id` FROM `wp_usermeta` LEFT JOIN `intranet_skills` on `skill_indicator` = `meta_value` WHERE `meta_key` LIKE 'wpcf-skills' AND `Skill_description` LIKE 'R&D'
我如何避免这样做?
我正在尝试使用生成的SQL查询从$wpdb
返回查询结果,因为我正在构建一个将多次使用的模板页面。构造的查询不会返回任何结果,即使查询本身(对我来说)有效。
我的PHP是......
global $wpdb;
$super_user_title = str_ireplace(array("superusers","super users","superuser","super user","super-user","super-users",'MS ','experts','expert'),"", get_the_title() );
$super_user_sql = "SELECT `user_id` FROM `$wpdb->usermeta` LEFT JOIN `intranet_skills` on `skill_indicator` = `meta_value` WHERE `meta_key` LIKE 'wpcf-skills' AND `Skill_description` LIKE '%$super_user_title%'";
$super_user_query = $wpdb->get_results($super_user_sql);
有问题的页面被称为R& D,所以我怀疑&符号可能会导致问题。它适用于所有其他页面,而不是这一页。
但是,如果我echo
变量$super_user_sql
并直接使用它,它就可以正常工作。
$wpdb->get_results("SELECT `user_id` FROM `wp_usermeta` LEFT JOIN `intranet_skills` on `skill_indicator` = `meta_value` WHERE `meta_key` LIKE 'wpcf-skills' AND `Skill_description` LIKE '%R&D%'");
以上正确返回预期结果。 $wpdb->print_error();
和$wpdb->last_error();
不返回任何内容。
我还尝试过首先准备查询,但同样失败。
$super_user_sql = $wpdb->prepare("SELECT `user_id` FROM `$wpdb->usermeta` LEFT JOIN `intranet_skills` on `skill_indicator` = `meta_value` WHERE `meta_key` LIKE 'wpcf-skills' AND `Skill_description` LIKE '%%%s%%'",$super_user_title);
这是怎么回事?