Je wil dus iets uitlezen uit een database. Eigenlijk is dat je 1e fout al, aangezien je iets wil uitlezen uit een tabel. Je hebt je server (bijvoorbeeld localhost) Daaronder je databases (bijvoorbeeld user007) Daaronder je tables (bijvoorbeeld namen, plaatsen)
Je wil dus je tables uitlezen. Je verbinding maak je met je server, en die zet je met de gegevens die je mee stuurt naar de juiste database.
Simpel, je maakt connectie met je gegevens, en je geeft daarna aan welke DB je wil gebruiken. Let ook op de uitlijning en de variabele namen. Hou dit duidelijk voor jezelf. lowercase, geen gekke tekens.
Tabel uitlezen met een SQL statement
De verbinding is er, nu de rest nog. Je wil alle namen uit je table 'namen' uitlezen. Voor mensen met PHPMyAdmin komt dit vrij bekend voor:
<? $sql = "SELECT `persoon` FROM `namen` WHERE `persoon` = 'peter'"; ?>
`Backticks` dus. Leer jezelf dit af. Backticks zijn slecht evil en moeten de eeuwigdurende zakjeuk krijgen. Je hebt ze niet nodig en ze maken het allemaal onduidelijk.
Voor je 1e goede statement maak je er dit van:
<? $sql = 'SELECT persoon FROM namen WHERE persoon = "peter"'; ?>
Weer uitlijning voor duidelijkheid. Dit doet hetzelfde als hierboven, zonder die verwarrende ``. Er staat nu begrijpelijk, selecteer het veld persoon, uit de tabel namen waar de waarde van persoon 'peter' is. Kind kan de was doen. Maarja nu kan je nog niets, het is eigenlijk gewoon een string, een losse variabele met inhoud. Op naar de volgende stap!
Om je query uit te voeren gebruik je mysql_query (doh). Hieruit komt een resultset, dus noem je variabele ook duidelijk ernaar.
<? $sql = 'SELECT persoon FROM namen WHERE persoon = "peter"'; $res = mysql_query($sql,$link); ?>
$link hier is niet nodig , maar het kan duidelijkheid geven met meerdere verbindingen. Eigen keus.
Beginnersfout deluxe!
Dus nu zit in $res ons resultaat van de query? Kan , maar je mag hier niet van uit gaan! Je query kan fout zijn, er kan een tikfout in zitten en je kan gewoon geen results hebben omdat er niets voldoet aan je voorwaarde. Hoe lossen we dit op? Foutafhandeling!
Nou zijn hiervoor de technische en de duidelijke manier. Ik pak de laatste.
<? $sql = 'SELECT persoon FROM namen WHERE persoon = "peter"'; $res = mysql_query($sql,$link); if ($res && mysql_num_rows($res) >= 1) { echo 'Resultaat!'; } else { echo 'Geen data gevonden'; } ?>
Hier staat in het kort: Als er resultaat komt uit je query functie, en het aantal rijen dat je resultaat telt groter of gelijk is aan 1. Oftewel, query gelukt en er is een uitkomst!
Nu kan je met $res nog niet al te veel. Als ik een aantal mensen heb die peter heten wil ik hun adressen allemaal wel eens weten. Hoe haal ik die nu uit $res?
Weer, een aantal manieren, ik zal de meest duidelijke uitleggen.
<? $sql = 'SELECT persoon, adres FROM namen WHERE persoon = "peter"'; $res = mysql_query($sql,$link); if ($res && mysql_num_rows($res) >= 1) { while ($row = mysql_fetch_array($res)) { echo 'naam: '.$row['persoon'].' adres: '.$row['adres'].'<br>'; } } else { echo 'Geen data gevonden'; } ?>
Dit begint er al op te lijken en is eigenlijk de hele basis hoe het goed kan. $res is niets meer dan een array met waardes die je uitleest. Met mysql_fetch_array($res) haal je deze per regel uit elkaar en zet ze in dit geval in $row, weer een heldere naam voor een array met alleen rijen!
in $row staan nu elke regel die je uitleest (while) de waardes uit persoon en adres uit de tabel namen.
Opmaak in table
Voor een strak overzichtje wil je wellicht de hele rataplan in een tabel zetten, hoe doe je dit netjes? Alehoep!
<? $sql = 'SELECT persoon, adres FROM namen WHERE persoon = "peter"'; $res = mysql_query($sql,$link); if ($res && mysql_num_rows($res) >= 1) { echo '<table border="10"> <tr> <td>naam</td> <td>adres</td> </tr>';
Er staat: Is er resultaat (if en de num_rows) , begin een table. Nadat er een table is begonnen vul je deze met rijen (while en de fetch_array). Als deze erin staan sluit je je table weer binnen je if. En is er geen result , krijg je de text Geen data gevonden.
The end!
Hoop dat het een beetje duidelijk is. Iedereen kan dit en kan dit snappen. Het is simpel uit te breiden naar eigen inzicht. Vooral met foutafhandeling zijn er nog een boel toevoegingen, maar zo kan je je al aardig redden.