求助:在WordPress中用PHP从数组获取单个值的问题
解决WordPress中从数据库查询结果获取单个值的问题
我看你的代码里有几个小细节出错了,导致没法正确取出目标值,咱们一步步来修正:
先说说你代码里的问题点:
- 循环里误用了未定义的变量
$cand,但你foreach的当前循环变量明明是$print - 对象属性的访问语法错了:对于
stdClass Object这种对象,正确写法是->属性名,而不是->['属性名'](那是数组的访问方式) - 如果你的
user_id在wp_confirmation表里是唯一的,其实根本没必要用foreach循环,直接取单条记录效率更高
修正后的代码方案
方案1:保留get_results写法(适合可能返回多条记录的场景)
$result = $wpdb->get_results("SELECT * FROM wp_confirmation WHERE user_id=$user_id"); if($result) { // 直接取第一条记录的Cand值 echo $result[0]->Cand; // 如果需要遍历多条记录,正确写法是: // foreach ( $result as $item ) { // echo $item->Cand; // } }
方案2:用get_row获取单条记录(更推荐,当user_id唯一时)
get_results返回的是结果数组,而如果user_id对应唯一一条记录,用$wpdb->get_row会直接返回单个对象,代码更简洁:
$row = $wpdb->get_row("SELECT * FROM wp_confirmation WHERE user_id=$user_id"); if($row) { echo $row->Cand; }
额外提醒:SQL注入风险
你的原始SQL语句存在安全隐患,最好用WordPress自带的参数化查询来避免:
// 用prepare方法处理参数,更安全 $row = $wpdb->get_row( $wpdb->prepare("SELECT * FROM wp_confirmation WHERE user_id=%d", $user_id) ); if($row) { echo $row->Cand; }
这里的%d表示把$user_id当作整数处理,如果是字符串类型的字段,就用%s,浮点数用%f。
内容的提问来源于stack exchange,提问作者nagaraj
相关产品推荐
相关产品推荐

