致命错误:不支持的操作数类型

时间:2010-01-16 14:32:13

标签: php

我继续收到以下错误,我想知道如何修复它。

Fatal error: Unsupported operand types on line 97

它围绕下面列出的代码区域。如果需要,我可以列出完整的代码。

PHP代码

$total_rating_points = mysqli_fetch_array($result);
if (!empty($total_rating_points) && !empty($total_ratings)){
    $avg = (round($total_rating_points / $total_ratings,1));
    $votes = $total_ratings;
    echo $avg . "/10  (" . $votes . " votes cast)";
} else {
    echo '(no votes cast)';
}

这是第97行

$avg = (round($total_rating_points / $total_ratings,1));

这是完整的代码。

function getRatingText(){
    $dbc = mysqli_connect ("localhost", "root", "", "sitename");

    $page = '3';

    $sql1 = "SELECT COUNT(*) 
             FROM articles_grades 
             WHERE users_articles_id = '$page'";

    $result = mysqli_query($dbc,$sql1);

    if (!mysqli_query($dbc, $sql1)) {
            print mysqli_error($dbc);
            return;
    }

    $total_ratings = mysqli_fetch_array($result);

    $sql2 = "SELECT COUNT(*) 
             FROM grades 
             JOIN articles_grades ON grades.id = articles_grades.grade_id
             WHERE articles_grades.users_articles_id = '$page'";

    $result = mysqli_query($dbc,$sql2);

    if (!mysqli_query($dbc, $sql2)) {
            print mysqli_error($dbc);
            return;
    }

    $total_rating_points = mysqli_fetch_array($result);
    if (!empty($total_rating_points) && !empty($total_ratings)){
        $avg = (round($total_rating_points / $total_ratings,1));
        $votes = $total_ratings;
        echo $avg . "/10  (" . $votes . " votes cast)";
    } else {
        echo '(no votes cast)';
    }
}

5 个答案:

答案 0 :(得分:19)

$total_rating_points是一个数组。你不能用数字来划分它。

答案 1 :(得分:3)

(自MySQL查询添加到问题以来编辑)

您已使用mysql_fetch_array从MySQL获取结果,顾名思义这会返回一个数组。你不能在数组上做那样的数学运算。

您想将MySQL查询更改为:

$sql1 = "SELECT COUNT(*) as count
         FROM articles_grades 
         WHERE users_articles_id = '$page'";

将mysql_fetch_array代码更改为:

 $total_rating_points = mysql_result($result, 0, "count");

这将返回实际数字,然后您可以将其用于数学。将您的两个查询更改为此格式,您应该很高兴。

答案 2 :(得分:2)

这通常是因为您的某个变量的类型是您不期望它的类型。

$x = "8";
$y = 4;
$x / $y;   // this is OK, PHP converts "8" to 8

$x = new FooObject();
$y = 4;
$x / $y;   // PHP says "wtfmate??"

转储变量$total_rating_points$total_ratings

var_dump($total_rating_points);
var_dump($total_ratings);

..然后通过你的代码向后工作(如果需要,检查debug_backtrace())以找出它出错的地方。

编辑:duhhh ..我刚看了你的代码并看到了问题。 $total_rating_points是一个数组,这就是问题的原因。你如何用数字划分数组?答:你不能。

您想要将数组的每个成员除以$total_ratings吗?例如:

// input: [2, 4, 6, 16] / 2
// output: [1, 2, 3, 8]
function divideArrayMembers($arr, $denominator) {
    $ret = array();
    foreach ($arr as $key => $val) {
        $ret[$key] = $val / $denominator;
    }
    return $ret;
}

......或者你想要除以总数?

input: [2, 4, 6, 16] / 2
output: 14  // (2 + 4 + 6 + 16) / 2

function divideTotal($arr, $denominator) {
    return array_sum($arr) / $denominator.
}

答案 3 :(得分:1)

array_sum()$total_rating_points上使用$total_ratings

答案 4 :(得分:0)

{{1}}