来自$ wpdb-> get_results的变量SQL查询转义&符号因此不会返回任何结果

时间:2017-01-23 12:02:47

标签: php mysql wordpress

编辑:我找到了原因但不是解决方案。通过使用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);

这是怎么回事?

0 个答案:

没有答案