Php 在PDO中获取总和

Php 在PDO中获取总和,php,pdo,sum,Php,Pdo,Sum,下面是我的代码,出于某种原因,它没有给我总数。这总是返回0。为什么不起作用 我使用了if($totprimits=''){来避免数据库中的空白字段 我还尝试删除到期费用,并使用$dueAmont=$result[0],但没有成功 $sql= "SELECT SUM(dueFees) AS due_fees FROM coursePayments WHERE studentId = $student"; $stmt = $c->prepare($sql); $stmt->execut

下面是我的代码,出于某种原因,它没有给我总数。这总是返回0。为什么不起作用

我使用了
if($totprimits=''){
来避免数据库中的空白字段

我还尝试删除到期费用
,并使用
$dueAmont=$result[0]
,但没有成功

$sql= "SELECT SUM(dueFees) AS due_fees FROM coursePayments WHERE studentId = $student"; 
$stmt = $c->prepare($sql);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_NUM);
$dueAmont = $result['due_fees']; 
if ($dueAmont==""){
    $dueAmont = '0';
}
echo $student." due amount ".$dueAmont;
不会返回关联数组。这是一个数字索引数组,因此无法找到字段

FETCH_NUM:返回一个数组,该数组由结果集中返回的列编号索引,从列0开始

那就是

FETCH_ASSOC:返回结果集中返回的按列名索引的数组

这就是你需要从中找回别名的原因

提示:

您可以删除if子句以检查该值是否为空并将其设置为0

$dueAmont = $result['due_fees']; 
if ($dueAmont==""){
    $dueAmont = '0';
}
简直可以

$dueAmont = intval($result['due_fees']); 

Gah,使用参数绑定!而且,对于单行/单列结果来说,它很好而且简单

$sql= "SELECT SUM(dueFees) FROM coursePayments WHERE studentId = ?"; 
$stmt = $c->prepare($sql);
$stmt->execute(array($student));
$dueAmont = (int) $stmt->fetchColumn();
补遗 在开发时,始终在完全公开错误的情况下运行PHP环境。这样您就不会错过上面代码中的简单错误。在
PHP.ini

display_errors = On
error_reporting = E_ALL

谢谢你,汉克。
$dueAmont=intval($result['due_fees');
很方便!但是我试着用
fetch(PDO::fetch_NUM)
替换
fetch(PDO::fetch_ASSOC)
但是结果仍然是0。你知道为什么吗?谢谢Phil。第3行有一个错误。我把它改成了
$stmt->->execute($student)
但这并没有反映总数?@JonaNathali你一定在使用旧版本的PHP(5.4之前)。我已经解决了我的问题如果我使用
$stmt->execute(array($student))
当版本更新到5.5时会有问题吗?@JonaNathali没有。PHP不会很快删除
数组()
构造。一旦你转到PHP
$sql= "SELECT SUM(dueFees) FROM coursePayments WHERE studentId = ?"; 
$stmt = $c->prepare($sql);
$stmt->execute(array($student));
$dueAmont = (int) $stmt->fetchColumn();
display_errors = On
error_reporting = E_ALL