Query verschilt in database en website

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jesper Diovo

Jesper Diovo

05/01/2009 16:08:00
Quote Anchor link
Hoi hoi,

Ik heb het volgende scriptje:

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
<?php
$bQuery
= "SELECT chats.* FROM chats WHERE chats.datum > (SELECT sessies.inlogdatum FROM sessies WHERE sessies.naam = '".$_SESSION['username']."') ORDER BY chats.datum DESC";
$bResult = mysql_query($bQuery);
if($bResult) {
    if(mysql_num_rows($bResult) > 0) {
        while($bRij = mysql_fetch_assoc($bResult)) {
            echo '<div class="chat-mssg">('.tijdomzetten($bRij['datum']).') '.$bRij['naam'].' zegt: '.stripslashes(nl2br($bRij['bericht'])).'</div>';
        }
    }
else {
        echo 'Er zijn nog geen berichten geplaatst.';
    }
}
else {
    echo mysql_error().' in query: '.$bQuery;
}

?>


Nu doet de query die hier wordt uitgevoerd verschillende dingen in de database en op de website. Op de website geeft hij namelijk wel records terug, maar in de database niet (zoals het zou moeten). Het enige wat ik dan veranderd heb is de ".$_SESSION['username']." in een naam die bestaat.

$_SESSION['username'] bevat ook gewoon de naam, anders zou je heel deze query niet uit kunnen voeren of ook maar een berichtje kunnen plaatsen, en dat kan ik wel..

Heeft iemand een idee waarom het fout gaat? Ik snap er zelf bar weinig van, aangezien hij eigenlijk gewoon zou moeten doen zoals het in de database gebeurd...

Alvast bedankt,

Jezpur
 
PHP hulp

PHP hulp

03/02/2023 12:04:37
 
Dennis Mertens

Dennis Mertens

05/01/2009 16:11:00
Quote Anchor link
1: Wanneer je maar gegevens haalt uit 1 tabel, hoef je de tabel naam er niet voor te zetten.
2: Gebruik geen *, maar een opsomming van de veld-namen die je wilt ophalen.

En jij zegt dat hij in de database wel records weer geeft, je bedoelt PHPMyAdmin?
 
Jesper Diovo

Jesper Diovo

05/01/2009 16:13:00
Quote Anchor link
Dennis Mertens schreef op 05.01.2009 16:11:
1: Wanneer je maar gegevens haalt uit 1 tabel, hoef je de tabel naam er niet voor te zetten.
2: Gebruik geen *, maar een opsomming van de veld-namen die je wilt ophalen.

En jij zegt dat hij in de database wel records weer geeft, je bedoelt PHPMyAdmin?

Ja, ik bedoel PHPMyAdmin ;-). Het gaat me nu eigenlijk niet hoe de query er verder uitziet, maar gewoon dat 'ie even werkt, daarna vermaak ik 'm wel beter. Ik snap gewoon niet waarom hij in PHPMyAdmin wel het juiste resultaat geeft, en als ik 't 'gewoon' uitvoer niet...
 
Rens nvt

Rens nvt

05/01/2009 16:38:00
Quote Anchor link
Misschien een flauwe vraag, maar als je $bQuery print, is hij dan zoals je verwacht?

Je zegt dat de query zonder waarde in $_SESSION['username'] niet zou kunnen werken, maar een vergelijking op username = '' kan wel, maar geeft wel een ander resultaat dan username = '<username>'
 
Jesper Diovo

Jesper Diovo

05/01/2009 16:41:00
Quote Anchor link
Ja, maar $_SESSION['username'] is gewoon gevuld, anders kan je geen berichten plaatsen enzo, dan zou er nl. geen naam komen te staan.

Edit: huh... nou doet hij het wel opeens? Het enige wat ik deed was $bQuery met var_dump() tonen... :S Rare zaak..
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 
Frank -

Frank -

05/01/2009 19:37:00
Quote Anchor link
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
<?php
$bQuery
= "
SELECT
  chats.*
FROM
  chats
WHERE
  chats.datum > (
    SELECT
      sessies.inlogdatum
    FROM
      sessies
    WHERE
      sessies.naam = '"
.$_SESSION['username']."'
  )
ORDER BY
  chats.datum DESC"
;
?>

Deze query gaat fout wanneer de subquery meerdere resultaten oplevert. Je krijgt dan de volgende foutmelding:
Quote:
Subquery returns more than 1 row

Gebruik hier de aggregate functie MAX(), je wilt waarschijnlijk toch de laatste datum hebben: MAX(sessies.inlogdatum)
Hiermee voorkom je problemen en je haalt de gewenste data op. Wat wil je nog meer?
 



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.