Moderator |
|
mysql_query retourneert een resource (dit is een variabele type dat naar een stuk geheugen wijst waar het resultaat-object is opgeslagen zeg maar) of (de boolse waarde) false indien er een (syntactische) fout in de query is opgetreden, in dat laatste geval wordt het "or die()" deel uitgevoerd.
Een query die geen resultaten oplevert is niet (per definitie) syntactisch fout.
Als je wilt controleren of een query resultaten oplevert, moet je de resource nader inspecteren met behulp van mysql_num_rows().
// query uitvoeren, foutmelding indien syntactische SQL fout
$res = mysql_query('... je query ...') or die(mysql_error());
// controleren of er resultaten zijn
if (mysql_num_rows($res) > 0) {
// 1 of meer resultaten, die je kunt ophalen met je favoriete mysql_fetch_... opdracht
// ...
} else {
// geen resultaten
// ...
}
// resource weer vrijgeven
mysql_free_result($res);
// query uitvoeren, foutmelding indien syntactische SQL fout // controleren of er resultaten zijn // 1 of meer resultaten, die je kunt ophalen met je favoriete mysql_fetch_... opdracht // ... } else { // geen resultaten // ... } // resource weer vrijgeven
Je doet er trouwens goed aan om MySQLi of PDO te gaan gebruiken, want de mysql_ lijn wordt langzaam maar zeker uitgefaseerd.
NB: Als je gebruikers-invoer hebt in je query ($_POST variabelen enzo) doe je er verstandig aan deze te "escapen" (te ontdoen van special MySQL betekenis) met behulp van de functie mysql_real_escape_string(), anders is je query mogelijk vatbaar voor "SQL injection" (het onbedoeld invoegen van tekstpassages die in MySQL een speciale betekenis hebben) en daarmee kan mogelijk de werking van de query wijzigen en (persoonlijke) informatie worden blootgelegd. Een veiligere variant zie er dus als volgt uit:
$res = mysql_query("SELECT email
FROM nieuwsbrief
WHERE email = '".mysql_real_escape_string($_POST['email'])."'") or die(mysql_error());
|