获取列的总和

Posted

技术标签:

【中文标题】获取列的总和【英文标题】:Getting the sum of a column 【发布时间】:2019-06-20 12:37:35 【问题描述】:

试图在 type="outbound" 的“事务”表中获取(总)列的总和,但我无法将其打印出来。

$stmt4 = $dbcon->prepare("SELECT SUM(total) FROM transactions WHERE proid=$id ");
$stmt4->execute();
$thetotal= $stmt4->fetch(PDO::FETCH_ASSOC);

echo $thetotal;

我收到了这个错误

(..)中的数组到字符串的转换

如何回显总列的总和?

【问题讨论】:

echo $thetotal['SUM(total)'] 也可以在 SQL 中不使用别名的情况下工作,但 @Qirel 的答案更常用。还要注意 SQL 注入,因为 $id 仍然很容易出现,Qirel 也提到了这一点。 只是添加...echo 命令无法打印数组。对于调试,如果您想查看任何变量(包括数组)中的数据,可以使用print_r 代替:print_r($thetotal); 【参考方案1】:

获取结果集后,您将获得一个结果数组 - 这不能作为来自 echo 的值打印。您需要选择要打印的确切列。如果你给它分配一个别名,那就更容易了,通过SUM(total) AS tot - 现在总和的名称是tot

在准备好的语句中也使用适当的有界参数。

$stmt4 = $dbcon->prepare("SELECT SUM(total) as tot FROM transactions WHERE proid=?");
$stmt4->execute([$id]);
$thetotal = $stmt4->fetch(PDO::FETCH_ASSOC);

echo $thetotal['tot'];

【讨论】:

您还可以获取数字索引数组并访问第零个元素。去罗马有很多方法.. ;-) 我同意。我发布了替代答案。【参考方案2】:

警告 切勿将 php 变量放在 SQL 字符串中。它使您的 SQL 容易受到 SQL 注入的攻击,并可能给您带来很多问题。

您可以使用fetchColumn解决您的问题

$stmt4 = $dbcon->prepare("SELECT SUM(total) FROM transactions WHERE proid=? ");
$stmt4->execute([$id]);
$thetotal = $stmt4->fetchColumn();

echo $thetotal;

或者你可以使用fetchPDO::FETCH_COLUMN

$stmt4 = $dbcon->prepare("SELECT SUM(total) FROM transactions WHERE proid=? ");
$stmt4->execute([$id]);
$thetotal = $stmt4->fetch(PDO::FETCH_COLUMN);

echo $thetotal;

【讨论】:

如果我不应该在我的 sql 中使用变量,有什么更好的方法? 使用准备和执行,如我的回答所示。您应该只在查询中放置占位符,然后通过执行函数传递数据。

以上是关于获取列的总和的主要内容,如果未能解决你的问题,请参考以下文章

通过 group by 和 joins 获取多个表的多个列的总和

获取具有多个枢轴的两列的总和

获取Rails模型中关联列的总和

如何从连接中的一组记录中获取列的总和?

如何获取单个整数/浮点列的总和达到某个值的行

在一个 LINQ 查询中获取两列的总和