2 keer het resultaat van een query gebruiken
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$strServer = "localhost";
$strDatabase = "boeken";
$strUser = "root";
$strPassword = "";
$objDB = new PDO('mysql:host='.$strServer.';dbname='.$strDatabase.'', $strUser, $strPassword);
$strSql = "SELECT * FROM autheurs";
$arrResults = $objDB->query($strSql);
foreach($arrResults as $arrRow) {
echo $arrRow['Voornaam'].' '.$arrRow['Achternaam'].'<br>';
}
echo "Opnieuw <br />";
foreach($arrResults as $arrRow) {
echo $arrRow['Voornaam'].' '.$arrRow['Achternaam'].'<br>';
}
?>
$strServer = "localhost";
$strDatabase = "boeken";
$strUser = "root";
$strPassword = "";
$objDB = new PDO('mysql:host='.$strServer.';dbname='.$strDatabase.'', $strUser, $strPassword);
$strSql = "SELECT * FROM autheurs";
$arrResults = $objDB->query($strSql);
foreach($arrResults as $arrRow) {
echo $arrRow['Voornaam'].' '.$arrRow['Achternaam'].'<br>';
}
echo "Opnieuw <br />";
foreach($arrResults as $arrRow) {
echo $arrRow['Voornaam'].' '.$arrRow['Achternaam'].'<br>';
}
?>
De uitvoer:
Harvey Deitel
Paul Deitel
Tem Nieto
Opnieuw
Na de opnieuw komt er niets meer. Waaraan kan het probleem liggen. Het zou stom zijn moest ik de query 2 keer moeten uitvoeren om 2 keer de data te krijgen.
//1e loop
$arrResults = reset($arrResults );
//2e loop
Als is de opbouw van je code niet handig.
Als je eerst alle afhandeling en dan pas output doet kun je alles in 1 loop doen.
Gewijzigd op 04/01/2011 14:33:02 door TJVB tvb
Het is een 'iterator', een object waarmee je een foreach kan doen (doe maar eens een var_dump() op $arrResults). Om je probleem op te lossen moet je in de API ('handleiding') van PDO kijken.
Volgens deze pagina geeft PDO::query() een PDOStatement terug. Deze implementeert Traversable en is dus een iterator.
Het fetchen van een resultaat gaat in principe maar 1x. Een reset optie is er niet volgens PDOStatement en dus moet je het anders doen. PDOStatement::fetchAll() geeft wél een normale array terug.
Vervang $objDB->query($strSql) dus door $objDB->query($strSql)->fetchAll() bij de foreach om niet de PDOStatement te iteraten, wat blijkbaar maar 1x kan, maar een reguliere array.
Ik doe dit zo uitgebreid om je wat te leren over het gebruik van de PHP.net manual ;)
Gewijzigd op 04/01/2011 14:44:55 door Pim -
Gewijzigd op 04/01/2011 15:07:18 door dietger marechal
Fijn :D