verbinding maken met database lijkt niet goed te gaan
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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);
?>
//-------------------------------------------------
//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"> </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>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?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");
}
?>
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>
Gewijzigd op 01/01/1970 01:00:00 door Karel
Je vergeet een wachtwoord op te geven... Vervang PASSWORD in onderstaande script door het wachtwoord van de database, en het zou moeten werken
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
//-------------------------------------------------
//Database openen en gegevens naar scherm schrijven
$host="localhost";
$username="root";
$dbnaam="test";
$password="PASSWORD";
$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, $password) or die($fout);
mysql_select_db($dbnaam, $db) or die($fout);
$result = mysql_query($query);
?>
//-------------------------------------------------
//Database openen en gegevens naar scherm schrijven
$host="localhost";
$username="root";
$dbnaam="test";
$password="PASSWORD";
$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, $password) or die($fout);
mysql_select_db($dbnaam, $db) or die($fout);
$result = mysql_query($query);
?>
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost' (using password: YES) in C:\Program Files\xampp\htdocs\gelinkte tabellen\test.php on line 16
FOUT: openen database mislukt
Maar dat zou sowieso niet hoeven want heb meer scripts op deze manier verbinding laten maken met database (zonder $password), kan misschien iets te maken hebben met selecteren uit verschillende tabellen o.i.d. want is nu eerste keer dat ik dat probeer maar kan hier geen fout in ontdekken??
Gewijzigd op 01/01/1970 01:00:00 door karel
Controleer overigens ook of $result TRUE of FALSE is en gebruik mysql_error() om de exacte fout te achterhalen bij een FALSE.
kan bovenstaande foutmelding dan niet een ander probleem zjin dan verbinden met m'n database?
Gewijzigd op 01/01/1970 01:00:00 door karel
$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";
als ik hiervan een sql statement maak en hem uitvoer in het sql testvenster binnen php admin dan doet hij gewoon wat ik wil en zo werkt hij niet, wel als ik deze code verander om iets te selecteren uit 1 tabel. dus ik denk zelf eigenlijk dat er in iets fout gaat met de while lus?
Gewijzigd op 01/01/1970 01:00:00 door karel
Kortom, controleer of $result TRUE of FALSE is (query is gelukt of mislukt) en op basis van dit resultaat ga je iets met $result doen of toon je de foutmelding die je met mysql_error() ophaalt.
Edit: echo $query eens, dan zul je de fout zelf ook wel zien
Gewijzigd op 01/01/1970 01:00:00 door Frank -
als ik $query echo dan wordt er niets getoond
karel schreef op 08.12.2006 14:02:
Dat is dan duidelijk, er is helemaal geen query! Er valt dan ook geen query uit voeren...als ik $query echo dan wordt er niets getoond
Maar hoe ziet jouw code er dan uit?
En begin je de code wel met de volgende regels:
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 = t2.land_id
en nee die code staat er niet boven, ik moet ook zeggen dat ik niet zo veel van php weet, zal ik er eens boven plaatsen
Gewijzigd op 01/01/1970 01:00:00 door karel
Quote:
Dit is dus een waardeloze manier van queries schrijven, je ziet de fout namelijk niet eens.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
De volgende methode is minstens 100x beter:
Kijk maar eens goed naar t3WHERE....
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
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):
Code (php)
1
2
3
4
5
2
3
4
5
<?
$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";
?>
$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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
$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
";
?>
$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
";
?>
Gewijzigd op 01/01/1970 01:00:00 door Frank -
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?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
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
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!
$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?
Bedankt voor de hulp en de moeite!