hoe kan ik testen een of bepaalde rij bestaat in mijn db, met zijn id,
ik wil rechtstraat vragen aan de db of de rij bestaat of niet, niet meer, om de query zo simpel en snel mogelijk te houden. Dit omdat ik dit 5000 keer achter elkaar moet doen, en het anders veel te lang duurt!
ik heb de id van een lid, en ik moet testen of dit lid bestaat, dit om ploegenlijsten uit te kuisen. vermits er drie tabellen zijn: leden, ploegen, en een relatietabel
als er een ploeg verwijderd wordt, blijven de relaties in de relatietabel staan. maar nu moet ik deze tabel uitkuisen, maar ook als er leden verwijderd zijn en in een ploeg staan. moet de relatie ook verwijderd worden natuurlijk. daarom moet ik kunnen dit lid bestaad of niet.
In veel databases gaat dit automatisch, in MySQL helaas niet. Het heet referentiele integriteit. Stel dat je een order hebt met een aantal orderregels en dat je de order wilt wissen. Normaal gesproken moet een database dat verzoek weigeren, omdat er anders orderregels overblijven die niet meer bij een order horen. Als je tabel van het type MyIsam is, dan moet je dat handmatig checken. Ik geloof, maar weet het niet zeker, dat je met het type InnoDB met zogenaamde foreign keys kunt werken die referentiele integriteit afdwingen.
ja maar als ik nou een login systeem maak ( in mijn geval ) dan is het een beetje lastig als iemand met de naam 'henk' geregistreert staat in de db, iemand anders zich aanmeld met de naam 'henk' en dat die er dan 2 keer instaat,, dan krijg je fouten lijkt mij.. en anders krijg je dat hij niet word toegevoegd in de db, want hij bestaat al, en dat je dan geen melding krijgt.. oftewel iemand meld zich aan met de naam 'henk' en dan denkt ie, alles is goed gegaan,, geen error, OK! ik kan inloggen! en dan is het wachtwoord in een keer fout, en hij begrijpt er dan de ballen neit van!
@Niek: dat kun je simpel oplossen met phpMyAdmin. Door een veld "unique" te maken dwing je af dat elk veld in de database een unieke waarde moet hebben. Als iemand een record probeert in te voegen met dezelfde waarde voor het bewuste veld, krijg je een foutmelding met nummer 1062. Door via mysql_errno () te testen kun je de juiste melding naar de gebruiker sturen.
Nee, na het uitvoeren van een query kun je gewoon mysql_errno (dubbel r dus!) aanroepen.
<?php
$sql = "
INSERT INTO tabel
SET
veld1 = '$veld1',
veld2 = '$veld2'";
if (!$res = mysql_query ($sql)) {
if (mysql_errno() == 1062) {
// record met die veldnaam bestaat al
}
else {
// query is om een andere reden mislukt
}
}
?>