我有一个带有数字的HTML
表格,我正在尝试使用SUM
使MySql
显示在数字下方的表格底部。
function test_sum(){
$query = "SELECT SUM(test_column) FROM" . $this->table_name . " ";
$stmt = $this->conn->prepare( $query );
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$this->test_column = $row['SUM(test_column)'];
}
我要用来显示结果的完整代码
$stmt = $class_name->test_sum();
$row = $stmt->fetch(PDO::FETCH_ASSOC){
echo "$row['SUM(test_column)']";
}
答案 0 :(得分:1)
您应该在MySQL查询的总和中添加一个别名:
$query = "SELECT SUM(test_column) AS total FROM " . $this->table_name;
$stmt = $this->conn->prepare($query);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$this->test_column = $row['total'];
但是请注意,在查询中使用级联选择表名通常是不好的做法,并且如果该表名来自外部,则可以进行SQL注入。通常,在创建准备好的语句时,我们已经知道目标表是什么。
答案 1 :(得分:1)
首先,代码的PDO部分可以正常工作。 无需添加任何别名,'SUM(test_column)'同样好。是您的“哎呀”(或者更确切地说是从函数返回结果):
但是,PDO部分也可以改进,因为PDO是数据库包装器,它提供了许多帮助程序来简化常规操作的方法,包括从声明开始到return a single scalar value
此外,对没有占位符的查询使用prepare没有任何意义,使它有点像cargo cult prepared statement。 简单的query()就足够了
因此您的代码可以更简洁:
function test_sum()
{
$query = "SELECT SUM(test_column) FROM `$this->table_name`";
return $this->conn->query( $query )->fetchColumn();
}
现在,返回值已包含表中的总和,因此您可以立即将其回显:
echo $class_name->test_sum();