2016-10-21 4 views
2

Ich versuche foreach zu verwenden, um jede Zeile in einer Spalte zu echo. Aber ich immer:Alle Zeilen in Spalte mit foreach anzeigen

Warning: Invalid argument für foreach geliefert()

Hier mein Code:

<?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; 
    } 
} 
?> 

Mit diesem Code habe ich die erste Zeile in der Spalte bekommen:

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

Spalte 2 ist meine part_number Spalte, wenn ich meinen php wie oben formatiere es gibt mir die erste Instanz dieser Spalte Zeile. Wie bekomme ich es, um jede Zeile in der Spalte mit foreach anzuzeigen? Ist das überhaupt möglich oder gibt es eine bessere Methode, die Zeilen einer ganzen Spalte zu wiederholen?

UPDATE:

ich meinen Code auf diese geändert, aber es ist mir nur die erste Zeile des Spaltenwert zu geben, anstatt jede Zeile:

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

'print_r ($ row)' u wird die Idee bekommen, wie es – devpro

+0

angezeigt wird @devpro I echo $ Zeile geändert; to print_r ($ row) das gibt mir immernoch das selbe Ergebnis und bekomme die Warnung: Ungültiges Argument für foreach() – holodout

+0

versuche das selbe mit @ marc-b Beispiel – devpro

Antwort

1

Nach dem Update-Code wird nicht gibt Ihnen erste Reihe, es Ihnen eine Zeile nur wegen SUM() Funktion in Ihrer Abfrage zu geben:

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

Beachten Sie, dass, SUM() Willen geben die Gesamtsumme eine numerische Spalte

Also, in Ihrem Fall müssen Sie Funktion aus Ihrer Abfrage entfernen, als Sie alle Zeilen erhalten.

Sie können PHP für diesen Zweck so etwas wie verwenden:

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

fetchColumn() nicht einen Array zurück, so Sie können nicht darauf warten. Sie verwenden while statt:

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

Aber beachten Sie, dass dies nicht funktioniert, wenn Sie ein boolean Feld sind abruft. Gemäß dem Hinweis in der Dokumentation:

Hinweis:

PDOStatement :: fetchColumn() sollte nicht boolean Spalten verwendet werden, um abzurufen, da es unmöglich ist, einen Wert von FALSCH von kein unterscheiden zu Weitere Zeilen zum Abrufen Verwenden Sie stattdessen PDOStatement :: fetch() .

+0

dies geklärt Die Warnung, die ich erhielt, gibt jetzt einen Wert aus, der nach dem Wechsel zu fetch() 'Array' sagt. Wie kann ich dies dazu bringen, die Zeilen der Spalte zu wiederholen? – holodout

+0

@holodout: Jetzt können Sie die 'print_r ($ val)' '$ val' ist ein Array, so wenn Sie versuchen, Array zu echo es wird immer geben Sie' Array' :) und ich bereits im Kommentartest mit diesem gleich erwähnt Beispiel – devpro

+0

fetch() Gibt ein Array zurück ... Sie müssen wirklich lernen, wie man die Dokumente liest und nicht nur blind Code ergraut. –

Verwandte Themen