Как правильно использовать функцию MySql SUM в OOP PDO? - PullRequest
1 голос
/ 21 июня 2019

У меня есть таблица 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)'];

}

Полный код Iпытаюсь использовать для отображения результатов

    $stmt = $class_name->test_sum();
    $row = $stmt->fetch(PDO::FETCH_ASSOC){
    echo "$row['SUM(test_column)']";
    }

Ответы [ 2 ]

1 голос
/ 22 июня 2019

Прежде всего, часть PDO вашего кода работает нормально. Нет необходимости добавлять псевдонимы , 'SUM (test_column)' также хорош.Это ваш "oop" (или, скорее, возвращающий результат из функции) испорчен:

  • вы присваиваете его переменной вместо того, чтобы возвращать
  • , который вы пытаетесь использовать(не существует) возвращаемое значение в виде массива, когда оно уже является скалярным значением.

Однако часть PDO также может быть улучшена, так как PDO является оболочкой базы данных он предлагает множество вспомогательных методов для упрощения рутинных операций, в том числе один для , возвращающий одно скалярное значение сразу после оператора.

Кроме того, нет смысла использовать метод подготовки к запросу, который нене содержит заполнителей, что делает его вроде подготовленного культа грузового заявления .Простого запроса () будет достаточно

Так что ваш код может быть намного чище:

function test_sum()
 {
    $query = "SELECT SUM(test_column) FROM `$this->table_name`";
    return $this->conn->query( $query )->fetchColumn();
 }

Теперь возвращаемое значение уже содержит сумму из таблицы, поэтомуВы можете повторить это сразу:

echo $class_name->test_sum();
1 голос
/ 21 июня 2019

Вы должны добавить псевдоним к сумме в запросе 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,если это имя таблицы будет приходить извне.Как правило, мы уже знаем, какой будет таблица назначения при создании подготовленного оператора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...