如何在WordPress页面展示MySQL表列求和值?已遇代码问题
问题分析与解决方案
嘿,我找到你代码的问题啦!
问题根源
你用$wpdb->get_results()获取查询结果时,它默认返回的是对象数组,而不是你以为的关联数组。所以$result_good['good_points']这种数组键的访问方式根本取不到值,自然只会显示前面的文字,后面的数值为空。
修正方案
这里有两种简单的修正方式,选哪种都可以:
方式一:改用get_row()获取单行结果
因为你的SQL查询只返回一行汇总数据,用get_row()更合适,它可以直接返回单个对象(或关联数组):
function sum_good() { global $wpdb; // 用get_row获取单行结果,指定ARRAY_A参数返回关联数组 $result_good = $wpdb->get_row("SELECT SUM(points) AS good_points FROM mytable WHERE category='Good'", ARRAY_A); $haha = "Total Points for Good = " . $result_good['good_points']; return $haha; } add_shortcode('sumgood', 'sum_good'); // 同理处理Bad类别的短代码 function sum_bad() { global $wpdb; $result_bad = $wpdb->get_row("SELECT SUM(points) AS bad_points FROM mytable WHERE category='Bad'", ARRAY_A); $haha = "Total Points for Bad = " . $result_bad['bad_points']; return $haha; } add_shortcode('sumbad', 'sum_bad');
方式二:如果坚持用get_results(),要访问对象属性
get_results()返回的是对象数组,你需要先取数组的第一个元素,再访问它的属性:
function sum_good() { global $wpdb; $result_good = $wpdb->get_results("SELECT SUM(points) AS good_points FROM mytable WHERE category='Good'"); // 取数组第一个对象,访问其good_points属性 $haha = "Total Points for Good = " . $result_good[0]->good_points; return $haha; } add_shortcode('sumgood', 'sum_good');
使用方法
把修正后的代码添加到你的主题(或子主题)的functions.php文件里,然后在WordPress页面或文章中直接插入短代码:
- 显示Good类别总分:
[sumgood] - 显示Bad类别总分:
[sumbad]
额外小提示
如果以后你的查询需要用到动态参数(比如用户输入的类别),一定要用$wpdb->prepare()来防止SQL注入,示例代码如下:
$category = 'Good'; $query = $wpdb->prepare("SELECT SUM(points) AS total FROM mytable WHERE category=%s", $category); $result = $wpdb->get_row($query, ARRAY_A);
内容的提问来源于stack exchange,提问作者Laishram Pilot
相关产品推荐
相关产品推荐

