2016-10-21 24 views
2

Я пытаюсь использовать foreach для эха каждой строки в столбце. Но я получаю:Показать все строки в столбце с foreach

Предупреждения: Неверный аргумент, поставляемый для Еогеаспа()

Вот мой код:

<?php 
$user = user; 
$pass = pass; 
$dbh = new PDO('mysql:host=localhost;dbname=onlyaskf_registered', $user, $pass); 

$stmt = $dbh->prepare("SELECT COUNT(*), sum(price),part_number,location,price FROM products WHERE code = :usercode"); 
$stmt->bindParam(':usercode', $_SESSION['MM_Username']); 

?> 

<?php 
if ($stmt->execute()) { 
    foreach($stmt->fetchColumn(2) as $row) { 
     echo $row; 
    } 
} 
?> 

С помощью этого кода я могу получить первую строку в столбце:

<?php 
if ($stmt->execute()) { 
    $row = $stmt->fetchColumn(2); 
    echo $row; 
} 
?> 

Столбец 2 - это моя колонка part_number, если я отформатирую свой php, как указано выше он дает мне первый экземпляр строки этого столбца. Как мне показать каждую строку в столбце с помощью foreach? Возможно ли это, или есть лучший метод для эха строк целого столбца?

UPDATE:

Я изменил код для этого, но это только дает мне значение столбца первой строки вместо каждой строки:

<?php if ($stmt->execute()) { 
while($val = $stmt->fetch()) { 
echo $val['part_number']; 
} 
} ?> 
+1

'print_r ($ строки)' и будет получить представление, как она будет отображаться – devpro

+0

@devpro Я изменил эхо $ строки; to print_r ($ row), это все равно дает мне тот же результат, хотя и я получаю предупреждение: неверный аргумент, предоставленный foreach() – holodout

+0

попробуйте сделать то же самое с @ marc-b example – devpro

ответ

1

После вашего обновления, код не дает вам первый ряд, это дает вам одну строку только из SUM() функции в запросе:

SELECT COUNT(*), sum(price),part_number,location,price FROM products 

Обратите внимание, что, SUM() воли возвращает общую сумму числовой столбец.

Итак, в вашем случае вам нужно удалить функцию sum(price) из вашего запроса, чем вы получите все строки.

Вы можете использовать PHP для этого что-то вроде:

$sum = 0; 
while($val = $stmt->fetch()) { 
    $sum += $val['price']; 
} 
echo $sum; // will return sum of all rows. 
1

fetchColumn() не возвращает массив, так вы не можете его использовать. Вы можете использовать вместо while:

while($val = $stmt->fetchColumn(2)) { 
    echo $val; 
} 

Но обратите внимание, что это не работает, если вы извлечения булево поле. В соответствии с запиской в ​​документации:

Примечание:

PDOStatement :: fetchColumn() не должен использоваться для извлечения логических столбцов, так как невозможно отличить значение FALSE от там быть нет больше строк для извлечения. Вместо этого используйте PDOStatement :: fetch() .

+0

это прояснилось предупреждение, которое я получал, теперь он выводит значение, которое говорит «Массив» после переключения на выборку(). Как я могу заставить это повторять строки столбца? – holodout

+0

@holodout: теперь u может chk 'print_r ($ val)' '$ val' - это массив, поэтому, когда вы пытаетесь выполнить эхо-массив, он всегда будет давать u' Array' :), и я уже упомянул в тесте комментария тот же Пример – devpro

+0

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

Смежные вопросы