[PDO] krijg niet alle rijen terug waar ik om vraag.
ik zit een beetje in de knoop met PDO..
ik probeer allemaal rijen op te halen.. alleen wanneer ik deze op wil halen doe ik iets heel fout volgens mij waardoor ik of niets terug krijg (while loop) of alleen de laatste rij.. (foreach loop ) hieronder mijn code.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
$msg = '';
try
{
$db = new PDO('mysql:host=localhost;dbname=testData', 'root', 'root');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $db->prepare(' SELECT
id, username, pass, gender
FROM
testTable
');
$stmt->execute();
if($stmt === false)
{
$msg = 'error 03';
}
else
{
/*while($row = $stmt->fetch(PDO::FETCH_ASSOC));
{
$msg = 'id ' . $row['id'] . '<br>';
$msg .= 'username ' . $row['username'] . '<br>';
$msg .= 'password ' . $row['pass'] . '<br>';
$msg .= 'gender ' . $row['gender'] . '<br>';
}*/
foreach ($stmt as $row) {
$msg = 'id ' . $row['id'] . '<br>';
$msg .= 'username ' . $row['username'] . '<br>';
$msg .= 'password ' . $row['pass'] . '<br>';
$msg .= 'gender ' . $row['gender'] . '<br>';
}
}
}
catch (PDOException $e)
{
echo "Error:" . $e;
}
echo $msg;
$db = NULL;
?>
$msg = '';
try
{
$db = new PDO('mysql:host=localhost;dbname=testData', 'root', 'root');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $db->prepare(' SELECT
id, username, pass, gender
FROM
testTable
');
$stmt->execute();
if($stmt === false)
{
$msg = 'error 03';
}
else
{
/*while($row = $stmt->fetch(PDO::FETCH_ASSOC));
{
$msg = 'id ' . $row['id'] . '<br>';
$msg .= 'username ' . $row['username'] . '<br>';
$msg .= 'password ' . $row['pass'] . '<br>';
$msg .= 'gender ' . $row['gender'] . '<br>';
}*/
foreach ($stmt as $row) {
$msg = 'id ' . $row['id'] . '<br>';
$msg .= 'username ' . $row['username'] . '<br>';
$msg .= 'password ' . $row['pass'] . '<br>';
$msg .= 'gender ' . $row['gender'] . '<br>';
}
}
}
catch (PDOException $e)
{
echo "Error:" . $e;
}
echo $msg;
$db = NULL;
?>
Gewijzigd op 17/07/2012 14:39:17 door Reshad F
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$msg = ''; // eerst toch even vriendelijk initiëren
foreach ($stmt as $row) {
$msg .= 'id ' . $row['id'] . '<br>';
$msg .= ...
?>
$msg = ''; // eerst toch even vriendelijk initiëren
foreach ($stmt as $row) {
$msg .= 'id ' . $row['id'] . '<br>';
$msg .= ...
?>
Bij jou begin je $msg telkens weer opnieuw bij elke iteratie.
Gewijzigd op 17/07/2012 14:49:53 door Kris Peeters
Je kan ook fetchAll gebruiken, krijg je direct alle rijen terug uit de database in een multidimensionale array.
@Erwin ja ik deed eerst fetchAll maar dan krijg ik dit terug
http://cl.ly/image/0c0H0W2N0r2n
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
{
$msg .= 'id ' . $row['id'] . '<br>';
$msg .= 'username ' . $row['username'] . '<br>';
$msg .= 'password ' . $row['pass'] . '<br>';
$msg .= 'gender ' . $row['gender'] . '<br>';
}
?>
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
{
$msg .= 'id ' . $row['id'] . '<br>';
$msg .= 'username ' . $row['username'] . '<br>';
$msg .= 'password ' . $row['pass'] . '<br>';
$msg .= 'gender ' . $row['gender'] . '<br>';
}
?>
Toevoeging op 17/07/2012 14:59:13:
Edit:
ik krijg met de while loop nu een array als ik het op deze manier echo
maar ik krijg geen results wanneer ik
$msg = 'id ' . $row['id'] . '<br>';
$msg .= 'username ' . $row['username'] . '<br>';
$msg .= 'password ' . $row['pass'] . '<br>';
$msg .= 'gender ' . $row['gender'] . '<br>';
gebruik
ik krijg met de while loop nu een array als ik het op deze manier echo
maar ik krijg geen results wanneer ik
$msg = 'id ' . $row['id'] . '<br>';
$msg .= 'username ' . $row['username'] . '<br>';
$msg .= 'password ' . $row['pass'] . '<br>';
$msg .= 'gender ' . $row['gender'] . '<br>';
gebruik
Gewijzigd op 17/07/2012 15:06:19 door Reshad F
Reshad F op 17/07/2012 14:56:39:
Dat is niet zo gek, want het is een MULTIdimensionale array. Elk element in de array is dus een rij uit je database. Als je de eerste rij wilt hebben zal je dus dit moeten doen:
maar dan krijg ik alsnog 1 rij terug namelijk: rij 0? terwijl ik ook rij 1 en 2 en 3 terug wil zien. maar hoe moet ik dat doen dan? moet ik er ook nog een foreach loop aan vast plakken?
ja natuurlijk, het is een array....
want in spaghetti php zou je het in een while zetten..
Toevoeging op 17/07/2012 15:26:19:
Edit:
de foreach werkt overigens wel gewoon ( maar wil gewoon de logica hiervan )
de foreach werkt overigens wel gewoon ( maar wil gewoon de logica hiervan )
Quote:
moet ik er ook nog een foreach loop aan vast plakken?
En Erwin zegt daarop:
Quote:
ja natuurlijk, het is een array...
Wat jij '$row' noemt, is geen rij. Dat is je result (een array). Dus, die lees je dan uit als:
Toevoeging op 17/07/2012 15:30:56:
Je mag even goed een foreach / while / for / een andere lus gebruiken bij PDO hoor. In dit geval lijkt mij in elk geval een foreach het handigste. Anders moet je onnodig extra code gaan schrijven.
Het enige moment wanneer het wel beter is om te gebruiken, is als je niet direct je resultaten wilt echoen (of anderszins bewerken), maar bijvoorbeeld door wilt geven aan een ander deel van je applicatie. Bijvoorbeeld in OOP is het gebruikelijk dat je in de ene class de resultaten ophaalt en in een andere class ze pas bewerkt. Dan wil je dus alle resultaten in een array hebben. Dat kan je 'handmatig' doen, je kan het ook direct doen met fetchAll. Dat scheelt je dan weer code.
wat ik bedoel is in een normale spaghetti PHP situatie zou ik doen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
while($row = mysql_fetch_assoc($result));
{
$msg = 'id ' . $row['id'] . '<br>';
$msg .= 'username ' . $row['username'] . '<br>';
$msg .= 'password ' . $row['pass'] . '<br>';
$msg .= 'gender ' . $row['gender'] . '<br>';
}
echo $msg;
?>
while($row = mysql_fetch_assoc($result));
{
$msg = 'id ' . $row['id'] . '<br>';
$msg .= 'username ' . $row['username'] . '<br>';
$msg .= 'password ' . $row['pass'] . '<br>';
$msg .= 'gender ' . $row['gender'] . '<br>';
}
echo $msg;
?>
en ik had in mijn eerste post dus
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
while($row = $stmt->fetch(PDO::FETCH_ASSOC));
{
$msg = 'id ' . $row['id'] . '<br>';
$msg .= 'username ' . $row['username'] . '<br>';
$msg .= 'password ' . $row['pass'] . '<br>';
$msg .= 'gender ' . $row['gender'] . '<br>';
}
?>
while($row = $stmt->fetch(PDO::FETCH_ASSOC));
{
$msg = 'id ' . $row['id'] . '<br>';
$msg .= 'username ' . $row['username'] . '<br>';
$msg .= 'password ' . $row['pass'] . '<br>';
$msg .= 'gender ' . $row['gender'] . '<br>';
}
?>
als voorbeeld..
Gewijzigd op 17/07/2012 15:38:13 door Reshad F
van en je bent volgens mij klaar.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$msg = '';
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$msg .= 'id ' . $row['id'] . '<br>';
$msg .= 'username ' . $row['username'] . '<br>';
$msg .= 'password ' . $row['pass'] . '<br>';
$msg .= 'gender ' . $row['gender'] . '<br>';
}
?>
$msg = '';
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$msg .= 'id ' . $row['id'] . '<br>';
$msg .= 'username ' . $row['username'] . '<br>';
$msg .= 'password ' . $row['pass'] . '<br>';
$msg .= 'gender ' . $row['gender'] . '<br>';
}
?>
En GEEN puntkomma achter while(....); <== NIET DUS
Gewijzigd op 17/07/2012 16:00:27 door - SanThe -
Dat is pas een klassieker. Het genereert geen parse errors, geen warnings, niets.
Je merkt juist dat je niet het resultaat ziet dat je verwacht.
Gewijzigd op 17/07/2012 16:16:19 door Reshad F
Waarom gebruik je prepare op een enkele query zonder parameters?
eh een kleine gewoonte denk ik
Lol, net zo als een puntkomma achter elke regel zetten (gebeurt mij ook regelmatig)
De uren die programmeurs aller landen hebben verspild aan dit probleem ... ik zou ze niet willen uitbetalen.