Query verschilt in database en website
Ik heb het volgende scriptje:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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;
}
?>
$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
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?
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?
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...
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>'
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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";
?>
$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?