MySQL中如何通过已知同行某列值获取另一列对应数据?
解决WordPress中通过fix_id获取对应fix_against值的问题
你这段代码没生效主要是两个小问题导致的,我帮你拆解下并给出修正方案:
问题1:返回值处理错误
$wpdb->get_results()默认返回的是对象数组(或者关联数组,取决于传入的第二个参数),直接echo数组只会输出Array,而不是你要的fix_against字段值。如果只需要单个字段的单个结果,用$wpdb->get_var()更合适——这个方法专门用来获取查询结果中的单个值,简洁又高效。
问题2:prepare方法的占位符使用错误
$wpdb->prepare()的核心作用是防止SQL注入,正确用法是用占位符替代变量,而不是把变量直接塞进SQL语句加单引号。你的fix_id是整数类型,应该用%d作为占位符,prepare会自动帮你处理参数的类型和转义。
修正后的完整代码
global $wpdb; $known_value = 1837; // 使用%d整数占位符,将变量作为第二个参数传入prepare $sql = $wpdb->prepare( "SELECT fix_against FROM fixtures WHERE fix_id = %d", $known_value ); // get_var直接获取单个字段值 $result = $wpdb->get_var( $sql ); // 输出结果,同时处理无匹配记录的情况 if ( $result ) { echo $result; // 此时会输出Aus Vs. Eng } else { echo "未找到对应比赛记录"; }
额外补充:如果一定要用get_results怎么办?
如果你因为某些场景必须用get_results(),也可以这样处理返回值:
$result = $wpdb->get_results( $sql, ARRAY_A ); // 指定返回关联数组 if ( ! empty( $result ) ) { echo $result[0]['fix_against']; }
不过这种写法不如get_var()直接,建议优先用前者。
内容的提问来源于stack exchange,提问作者Jay Bro
相关产品推荐
相关产品推荐

