Hi,
Mir persönlich gefällt eigentlich Variante 1 mit "fetchColumn" ganz gut.
Kann man machen, finde ich aber irgendwie trotzdem unschoen.
Möglichkeit 2 ist vom Code her am aufwändigsten.
Und erfordert bei dieser Art der Umsetzung auch zwei Queries.
Oder besser Variante 3 mit "try" und "catch"?
Nee - try ... catch sollte man nur in Szenarios einsetzen, in denen wirkliche (Programmablauf-)Fehler auftreten koennen, auf die man anders nicht gescheit reagieren kann, die einem u.U. sogar das ganze Script zum Abbruch bringen wuerden.
Hier liegt aber kein solcher Fehler vor - lediglich zwei unterschiedliche Arten von Abfrageergebnis, entweder "enthaelt Datensaetze" oder "enthaelt keine Datensaetze".
Oder gibt es noch eine viel einfachere Lösung?
Ich wuerd's nach dem KISS-Prinzip einfach so umsetzen:
$result = $DBO->query(...);
$foundRows = false; // Flag, welches aussagt, ob Datensaetze gefunden wurden; wird mit false initialisiert
while($result->fetch(...)) {
$foundRows = true; // wenn die Schleife mindestens ein mal durchlaufen wird, dann gab's auch
// mindestens einen Datensatz - also Flag auf true setzen
// hier erfolgt weitere Verarbeitung der Datensaetze
}
if(!$foundRows) {
// Reaktion auf den Fall, dass keine Ergebnisdatensaetze vorhanden waren
}
MfG ChrisB