获取列的总和
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;
或者你可以使用fetch
和PDO::FETCH_COLUMN
$stmt4 = $dbcon->prepare("SELECT SUM(total) FROM transactions WHERE proid=? ");
$stmt4->execute([$id]);
$thetotal = $stmt4->fetch(PDO::FETCH_COLUMN);
echo $thetotal;
【讨论】:
如果我不应该在我的 sql 中使用变量,有什么更好的方法? 使用准备和执行,如我的回答所示。您应该只在查询中放置占位符,然后通过执行函数传递数据。以上是关于获取列的总和的主要内容,如果未能解决你的问题,请参考以下文章