Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

PHP PDO PDO::fetch() in combinatie met foreach

Pagina: 1
Acties:

Onderwerpen


  • MekZi
  • Registratie: Mei 2009
  • Laatst online: 01-08 21:17
Ik maak gebruik van PDO om met een MySql-database te communiceren. Nu gebruik ik echter het volgende:
code:
1
2
3
4
5
6
7
8
9
...
<?php
$sql = " ";
$stmt = $dbc->query($sql);
foreach ($stmt->fetch(PDO::FETCH_ASSOC) as $row) {
    $test[] = $row;
}
?>
...


De sql zal met mijn gegeven sql meerdere resultaten moeten terug geven. Echter ontvang ik er maar 1 resultaat. Wanneer ik het volgende doe werkt het wel zoals verwacht. En vind ik meerdere resultaten terug in mijn array test:
code:
1
2
3
4
5
6
7
8
9
...
<?php
$sql = " ";
$stmt = $dbc->query($sql);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $test[] = $row;
}
?>
...


Wat doe ik dus verkeerd dat ik met foreach, maar 1 resultaat terug krijg?

Alvast bedankt!

ps ik lees $test uit met print_r() tussen de <pre> tags.

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 24-11 00:23

DataGhost

iPL dev

PHP:
1
2
3
4
$a = array("a", "b", "c");
foreach ($a as $row) {
    $test[] = $row;
}

PHP:
1
2
3
4
$a = array("a", "b", "c");
while ($row = $a) {
    $test[] = $row;
}


Doen deze twee stukken hetzelfde?
spoiler:
daarnaast wil je denk ik in je foreach alle rijen hebben ipv eentje, daar hebben ze iets voor uitgevonden in de PDO-klasse

[ Voor 25% gewijzigd door DataGhost op 22-04-2012 20:35 ]


  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 24-11 13:18

Koppensneller

winterrrrrr

Je moet hier even goed kijken wat er gebeurt. Een foreach pakt elk item uit de collectie die je opgeeft en maakt die beschikbaar in de gespecificeerde variabele. Jij geeft alleen geen collectie, maar een enkel item op.

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 24-11 08:37
Als je graag foreach wilt gebruiken i.p.v. een while loop kun je ook eens kijken naar fetchAll.

  • Feanathiel
  • Registratie: Juni 2007
  • Niet online

Feanathiel

Cup<Coffee>

Ik zie net dat een PDOStatement traversable is. Nog niet geprobeerd, maar in principe moet je dan gewoon het volgende kunnen doen:

PHP:
1
2
$stmt = $dbc->query($sql);
foreach ($stmt as $row) { }


Edit: staat trouwens ook gewoon bij de voorbeelden :Y)

[ Voor 20% gewijzigd door Feanathiel op 22-04-2012 21:36 ]