如何在OOP PDO中正确使用MySql SUM函数?

时间:2019-06-21 05:05:01

标签: php mysql pdo

我有一个带有数字的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)']";
    }

2 个答案:

答案 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();