пытаюсь получить сумму столбца (общего) в таблице «транзакции», где тип = «исходящий», но я не могу распечатать его.
$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
не может печатать массивы. Для отладки, если вы хотите увидеть данные в любой переменной (включая массивы), вы можете вместо этого использовать print_r
: print_r($thetotal);
Как только вы извлекаете набор результатов, вы получаете массив результатов — его нельзя распечатать как значение из 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'];
Вы также можете получить числовой индексированный массив и получить доступ к нулевому элементу. Есть много путей в Рим.. ;-)
Я согласен. Я разместил альтернативный ответ.
Предупреждение Никогда не помещайте переменные 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?
Используйте подготовку и выполнение, как показано в моем ответе. Вы должны поместить в запрос только заполнители, а затем передать данные через функцию выполнения.
echo $thetotal['SUM(total)']
также работает без использования псевдонима в SQL, но чаще используется ответ @Qirel. А также обратите внимание на SQL-инъекции, поскольку$id
все еще подвержен этому, о чем также упомянул Qirel.