Bij het uitvoeren van onderstaande code krijg ik de foutmelding die hier ook onder staat. Het lijkt me dat het iets met de verbinding met database heeft te maken maar dat weet ik niet zeker. kan iemand me hierbij helpen?

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\Program Files\xampp\htdocs\gelinkte tabellen\test.php on line 39


<?php
//-------------------------------------------------
//Database openen en gegevens naar scherm schrijven

$host="localhost";
$username="root";
$dbnaam="test";
$fout= "FOUT: openen database mislukt";
$query = "SELECT t1.id, t1.naam, t1.adres, t1.woonplaats, t2.functie, t3.land FROM ";
$query .= "tbl_persoon AS t1, tbl_functie AS t2, tbl_land AS t3";
$query .= "WHERE t2.functie_id = t1.functie_id AND t3.land_id = t1.land_id";
//--- einde initalisatie

$db=mysql_connect($host, $username) or die($fout);
mysql_select_db($dbnaam, $db) or die($fout);
$result = mysql_query($query);
?>

<html>
<head>
<title>overzicht</title>
</head>

<body>
<h2 align="center">Overzicht<br>
</h2>
<p align="center">&nbsp;</p>
<table width="50%" border="1" bordercolor="#000000" align="center">
<tr>
<th><div align="center"><strong>Naam</strong></div></th>
<th><div align="center"><strong>Adres</strong></div></th>
<th><div align="center"><strong>Woonplaats</strong></div></th>
<th><div align="center"><strong>Functie</strong></div></th>
<th><div align="center"><strong>Land</strong></div></th>
</tr>
<?php

while (list($id, $naam, $adres, $woonplaats, $functie, $land) = mysql_fetch_row($result)){
echo("<tr><td>$tnaam</td>
<td>$adres</td>
<td>$twoonplaats</td>
<td>$functie</td>
<td>$land</td>
</tr>\n");
}
?>
</body>
</html>
ja nu zie ik het inderdaad, maar is dat niet hetzelfde als bij t3.land dan en hoe los ik dit op? zelf zou ik denken om daar ook allebei een komma achter te zetten, maar dan krijg ik alsnog dezelfde fout. bedankt voor deze tip, was eigenlijk wel logisch
t3WHERE is 1 woord, dat wordt dus de alias van tbl_land =>
tbl_land AS t3WHERE

vervolgens ga je verder met t2.functie_id = t1.functie_id wat natuurlijk in het honderd loopt. Tevens verwijs je naar t3.land waarbij de tabel (of de alias) t3 niet bestaat. Daar heb je net t3WHERE van gemaakt.

Je moet er gewoon voor zorgen dat je jouw queries beter gaat noteren, en niet in meerdere stukken gaat opknippen. Daarmee wordt het onoverzichtelijk en vraag je dus om problemen.

Fout (dus nooit meer doen):
<?
$query = "SELECT t1.id, t1.naam, t1.adres, t1.woonplaats, t2.functie, t3.land FROM ";
$query .= "tbl_persoon AS t1, tbl_functie AS t2, tbl_land AS t3";
$query .= "WHERE t2.functie_id = t1.functie_id AND t3.land_id = t1.land_id";
?>
Goed:
<?
$query = "
SELECT
t1.id,
t1.naam,
t1.adres,
t1.woonplaats,
t2.functie,
t3.land
FROM
tbl_persoon AS t1,
tbl_functie AS t2,
tbl_land AS t3
WHERE
t2.functie_id = t1.functie_id
AND
t3.land_id = t1.land_id
";
?>
wat bedoel je precies? waarom kan t2.functie_id = t1.functie_id niet en
t3.land_id = t1.land_id wel?? functie_id komt in 2 tabellen voor en deze velden zijn aan elkaar gelinkt. voor land_id geldt hetzelfde.

is een komma achter t3 voldoende dan?
Ok, ik zal jouw oorspronkelijke query dan eens duidelijk uitschrijven:

SELECT 
  t1.id, 
  t1.naam, 
  t1.adres, 
  t1.woonplaats, 
  t2.functie, 
  t3.land 
FROM 
  tbl_persoon AS t1, 
  tbl_functie AS t2, 
  tbl_land AS t3WHERE 
t2.functie_id = t1.functie_id 
AND 
t3.land_id = t1.land_id

Waar is nu de tabel of de alias t3 gebleven? En waar is de WHERE gebleven? Alle verwijzingen naar de tabel t3 zijn fout en de vergelijking is ook fout omdat er geen WHERE meer is.

'Ja maar, er staat toch t3WHERE in de query?', zul je dan roepen. Maar 't3WHERE' is toch totaal wat anders dan 't3[spatie]WHERE'? Of niet dan? Dat is dus het verschil tussen een foute en een goede query.

Het grootste probleem is nog jouw notatie, ik kan het niet vaak genoeg zeggen, je ziet de fout niet eens omdat je de query niet ziet zoals die naar de database wordt gestuurd. Daarom dus nooit meer opknippen in meerdere variabelen!
ik begrijp wel wat je zegt, maar met deze query krijg ik nog steeds dezelfde foutmelding

$query = "
SELECT
t1.person_id,
t1.naam,
t1.adres,
t1.woonplaats,
t2.functie,
t3.land,
FROM
tbl_persoon AS t1,
tbl_functie AS t2,
tbl_land AS t3,
WHERE
t1.functie_id = t2.functie_id
AND
t1.land_id = t3.land_id
";

en zo is het toch apart lijkt me?
ah sorry, stom idd nu werkt het beter.
Bedankt voor de hulp en de moeite!

Reageren