Получение суммы столбца

пытаюсь получить сумму столбца (общего) в таблице «транзакции», где тип = «исходящий», но я не могу распечатать его.

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

echo $thetotal;

я получаю эту ошибку

Array to string conversion in (..)

Как вывести сумму общего столбца?

echo $thetotal['SUM(total)'] также работает без использования псевдонима в SQL, но чаще используется ответ @Qirel. А также обратите внимание на SQL-инъекции, поскольку $id все еще подвержен этому, о чем также упомянул Qirel.
Raymond Nijland 20.06.2019 14:42

просто добавить... команда echo не может печатать массивы. Для отладки, если вы хотите увидеть данные в любой переменной (включая массивы), вы можете вместо этого использовать print_r: print_r($thetotal);

MER 20.06.2019 14:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Как только вы извлекаете набор результатов, вы получаете массив результатов — его нельзя распечатать как значение из 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'];

Вы также можете получить числовой индексированный массив и получить доступ к нулевому элементу. Есть много путей в Рим.. ;-)

Qirel 20.06.2019 14:56

Я согласен. Я разместил альтернативный ответ.

Dharman 20.06.2019 15:21

Предупреждение Никогда не помещайте переменные 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?

Hashim Alsadah 20.06.2019 15:28

Используйте подготовку и выполнение, как показано в моем ответе. Вы должны поместить в запрос только заполнители, а затем передать данные через функцию выполнения.

Dharman 20.06.2019 15:41

Другие вопросы по теме