Eerste rij uit een SELECT word niet weergegeven

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tobias Tobias

Tobias Tobias

19/10/2013 11:27:00
Quote Anchor link
Hallo,

Ik ben bezig een systeempje te maken waarin je je eigen SELECT-query kunt laten draaien.
Nu heb ik een werkend systeem, alleen wordt hierbij steeds de eerste rij niet weergegeven. Iemand enig idee wat ik verkeerd doe?
(Dit is de versie zonder foutafhandeling etc, alleen relevante code en een voorbeeld-query)
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
<?php
$query
= mysql_query("SELECT liednr, bun, titel FROM bundel WHERE bun = 'eig' ORDER BY liednr ASC");
$aFields = array();
$row = mysql_fetch_assoc($query);
$koppen = array_keys($row);

$aantal = mysql_num_rows($query);
echo 'Er zijn '.$aantal.' rijen gevonden';

// Haal de kolomtitels op
echo '<table border=1 bordercolor=black>
        <tr><td>#</td>'
;
    foreach($koppen as $kop){
        echo '<td>'.$kop.'</td>';
        // Zet de kolomtitels in een array voor later gebruik
        array_push($aFields, $kop);
    }

echo '</tr>';

// Rij-counter
$i=1;

// Geef de gegevens weer
while($bRow=mysql_fetch_array($query)){
    echo '<tr>';
        echo '<td>'.$i.'</td>';
        foreach($aFields as $sField) {
            $bRow[$sField] = htmlentities($bRow[$sField]);
            // Kort de gegevens in als deze langer dan 50 karakters is
            if(strlen($bRow[$sField]) > 50){
                $bRow[$sField] = substr ($bRow[$sField],0,50).'...';
            }

            echo '<td>'.$bRow[$sField].'</td>';
        }

    echo '</tr>';
    $i++;
}


echo '</table>';
?>

In dit voorbeeld zou ik 40 rijen moeten krijgen. Er komt ook keurig: "Er zijn 40 rijen gevonden" te staan, dus de mysql_num_rows werkt wel goed. Er komen echter maar 39 rijen in de tabel te staan
Gewijzigd op 19/10/2013 11:33:23 door Tobias Tobias
 
PHP hulp

PHP hulp

06/10/2024 15:27:23
 
Willem vp

Willem vp

19/10/2013 11:57:33
Quote Anchor link
Als ik de code even snel scan, lijkt het erop dat je inderdaad 40 rijen terugkrijgt, maar dat je de eerste rij daarvan gebruikt voor de koppen. Er blijven dan dus nog 39 rijen over.

Ergo conclusio: er is geen probleem. ;-)

Toevoeging op 19/10/2013 12:02:16:

Het zou natuurlijk kunnen dat die eerste rij wel relevante data bevat, en dat je die eigenlijk misbruikt om de veldnamen te achterhalen. In dat geval zou mijn vervolgvraag zijn: waarom? Je weet immers de veldnamen al, want die noem je expliciet in je query.
 
Erwin H

Erwin H

19/10/2013 12:04:16
Quote Anchor link
Het probleem is natuurlijk gewoon de eerste fetch op regel 4. Die fetcht de eerste rij en die rij ben je dus vervolgens kwijt in de while loop.
 
Tobias Tobias

Tobias Tobias

19/10/2013 12:13:58
Quote Anchor link
@Erwin:
Dat lijkt inderdaad het probleem. Als ik op regel 22 de query opnieuw uitvoer, krijg ik wel de 40 rijen te zien. Bedankt!
 
Eddy E

Eddy E

19/10/2013 12:43:11
Quote Anchor link
Maar dat is natuurlijk NIET de oplossing. Gewoon de array weer resetten.
 
Tobias Tobias

Tobias Tobias

19/10/2013 12:48:52
Quote Anchor link
@Eddy: En hoe doet ik dat?

Aha, met mysql_data_seek($query, 0)
Gewijzigd op 19/10/2013 12:54:32 door Tobias Tobias
 
- SanThe -

- SanThe -

19/10/2013 12:58:59
Quote Anchor link
Waarom weer opnieuw een query?
Je kan $row ook gewoon in een echo zetten vóór de while().
 
Tobias Tobias

Tobias Tobias

19/10/2013 13:03:24
Quote Anchor link
Willem vp op 19/10/2013 11:57:33:
In dat geval zou mijn vervolgvraag zijn: waarom? Je weet immers de veldnamen al, want die noem je expliciet in je query.

In het voorbeeld staat de query al, maar het idee van het systeem is dat je je eigen query invoert en deze uitgevoerd wordt. Je weet dus van tevoren de veldnamen niet.
 
Eddy E

Eddy E

19/10/2013 13:20:43
Quote Anchor link
Maar is het dan niet makkelijker om die kolommen uit je query te halen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$query
= "geen idee wat, maar 't begint met SELECT";
$kolommen= str_replace("SELECT ", "", $query);
list($kolommen, $zooi) = explode("FROM", $kolommen);
$kolommen = explode(", ", $kolommen);
print_r($kolommen);
?>
 
Erwin H

Erwin H

19/10/2013 14:04:50
Quote Anchor link
En dat vind jij makkelijker Eddy? Moet je kijken wat voor onzin je allemaal moet doen om een uiteindelijk slecht resultaat te krijgen. Want hoe denk je dat de kolommen in je tabel gaan heten bij deze query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
SELECT COUNT(*) AS num, IF(name = '', '[no name]', name) AS name, COALESCE(views, 0) AS views
FROM blablabla


Een teller laten lopen met je while loop en checken of je met het eerste record bezig lijkt me veeeel makkelijker en dan gaat het in elk geval wel goed.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

19/10/2013 14:06:58
Quote Anchor link
Tobias Tobias op 19/10/2013 12:48:52:
@Eddy: En hoe doet ik dat?

Aha, met mysql_data_seek($query, 0)

Juist, is het aller makkelijkste



Toevoeging op 19/10/2013 14:08:18:

Op wat Erwin zegt na ;-)
 
Eddy E

Eddy E

19/10/2013 18:51:53
Quote Anchor link
Maar dat is natuurlijk NIET de oplossing. Gewoon de array weer resetten.
 
Erwin H

Erwin H

19/10/2013 19:37:50
Quote Anchor link
Waarom is dat NIET de oplossing? Twee keer fetchen als je het maar 1 keer nodig hebt kost meer resources dan een enkele counter (wat ook nog een bit mag zijn als je alleen wil weten of het de eerste rij is of niet).
 



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.