[PDO] krijg niet alle rijen terug waar ik om vraag.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Reshad F

Reshad F

17/07/2012 14:38:46
Quote Anchor link
Hallo allemaal,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;

?>
Gewijzigd op 17/07/2012 14:39:17 door Reshad F
 
PHP hulp

PHP hulp

28/11/2024 18:37:46
 
Kris Peeters

Kris Peeters

17/07/2012 14:49:13
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$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
 
Erwin H

Erwin H

17/07/2012 14:51:01
Quote Anchor link
Je kan ook fetchAll gebruiken, krijg je direct alle rijen terug uit de database in een multidimensionale array.
 
Reshad F

Reshad F

17/07/2012 14:56:39
Quote Anchor link
@kris resultaat blijft hetzelfde.. ik krijg alleen de laatste rij nog altijd.

@Erwin ja ik deed eerst fetchAll maar dan krijg ik dit terug

http://cl.ly/image/0c0H0W2N0r2n

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
      }

?>


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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
print '<pre>';
        var_dump($row);
?>


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
 
Erwin H

Erwin H

17/07/2012 15:10:42
Quote Anchor link
Reshad F op 17/07/2012 14:56:39:
@Erwin ja ik deed eerst fetchAll maar dan krijg ik dit terug

http://cl.ly/image/0c0H0W2N0r2n

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$row
= $stmt->fetchAll(PDO::FETCH_ASSOC);
      {

        $msg .= 'id ' . $row[0]['id'] . '<br>';
        $msg .= 'username ' . $row[0]['username'] . '<br>';
        $msg .= 'password ' . $row[0]['pass'] . '<br>';
        $msg .= 'gender ' . $row[0]['gender'] . '<br>';
      }

?>
 
Reshad F

Reshad F

17/07/2012 15:14:36
Quote Anchor link
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?
 
Erwin H

Erwin H

17/07/2012 15:17:10
Quote Anchor link
ja natuurlijk, het is een array....
 
Reshad F

Reshad F

17/07/2012 15:23:37
Quote Anchor link
maar waarom dan niet in een while? of is dat niet PDO?

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 )
 
Write Down

Write Down

17/07/2012 15:29:30
Quote Anchor link
Je zegt het toch zelf al?

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
foreach($result as $row) {
 echo $row['id'];
}

?>


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.
 
Erwin H

Erwin H

17/07/2012 15:35:31
Quote Anchor link
Ik gaf het ook als alternatief, niet omdat het perse beter is.
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.
 
Reshad F

Reshad F

17/07/2012 15:37:19
Quote Anchor link
@Write volgens mij snap je mijn bedoeling niet..

wat ik bedoel is in een normale spaghetti PHP situatie zou ik doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;

?>


en ik had in mijn eerste post dus

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
      }

?>


als voorbeeld..
Gewijzigd op 17/07/2012 15:38:13 door Reshad F
 
Wouter J

Wouter J

17/07/2012 15:41:02
Quote Anchor link
En maak daar:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
foreach ($stmt->fetch(PDO::FETCH_ASSOC) as $row) {
    // ...
}
?>

van en je bent volgens mij klaar.
 
- SanThe -

- SanThe -

17/07/2012 15:42:17
Quote Anchor link
Maar dan moet je nog steeds $msg buiten de loop definiëren.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
    }


?>


En GEEN puntkomma achter while(....); <== NIET DUS
Gewijzigd op 17/07/2012 16:00:27 door - SanThe -
 
Kris Peeters

Kris Peeters

17/07/2012 15:55:36
Quote Anchor link
O ja, die ; had ik niet eens gezien.
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.
 
Reshad F

Reshad F

17/07/2012 16:15:08
Quote Anchor link
@santhe is weer een pro in het vinden van fouten :) daarom deed mn while het dus niet! zoals ik al zei een stomme fout..
Gewijzigd op 17/07/2012 16:16:19 door Reshad F
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

17/07/2012 16:15:44
Quote Anchor link
Offtopic:
Waarom gebruik je prepare op een enkele query zonder parameters?
 
Reshad F

Reshad F

17/07/2012 16:16:51
Quote Anchor link
eh een kleine gewoonte denk ik
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

17/07/2012 16:39:12
Quote Anchor link
Lol, net zo als een puntkomma achter elke regel zetten (gebeurt mij ook regelmatig)
 
Kris Peeters

Kris Peeters

17/07/2012 16:50:17
Quote Anchor link
De uren die programmeurs aller landen hebben verspild aan dit probleem ... ik zou ze niet willen uitbetalen.
 
Wouter J

Wouter J

17/07/2012 17:38:17
Quote Anchor link
En daarom is het ook gewoon veel beter de brackets op dezelfde lijn te zetten...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
while ($row = ...) {
}

?>
Gewijzigd op 17/07/2012 17:38:25 door Wouter J
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.